다음을 통해 공유


PowerShell을 사용하여 Reporting Services 구독 소유자 변경 및 나열 및 구독 실행

SQL Server 2008 R2Reporting Services부터 Reporting Services 구독의 소유권을 프로그래밍 방식으로 한 사용자에서 다른 사용자로 이전할 수 있습니다. 이 항목에서는 구독 소유권을 변경하거나 단순히 나열하는 데 사용할 수 있는 몇 가지 Windows PowerShell 스크립트를 제공합니다. 각 샘플에는 기본 모드와 SharePoint 모드 모두에 대한 샘플 구문이 포함되어 있습니다. 구독 소유자를 변경하면 구독이 새 소유자 및 사용자 보안 컨텍스트에서 실행됩니다. 보고서의 UserID 필드에 새 소유자의 값이 표시됩니다. PowerShell 샘플에서 호출하는 개체 모델에 대한 자세한 내용은 다음을 참조하세요. ChangeSubscriptionOwner

PowerShell 관련 콘텐츠

적용 대상: Reporting Services 기본 모드 | Reporting Services SharePoint 모드

이 주제에서:

스크립트를 사용하는 방법

권한

이 섹션에서는 네이티브 및 SharePoint 모드 Reporting Services에 대해 각 메서드를 사용하는 데 필요한 사용 권한 수준을 요약합니다. 이 항목의 스크립트는 다음 Reporting Services 메서드를 사용합니다.

기본 모드:

  • 구독 나열: ( HYPERLINK "https://technet.microsoft.com/library/microsoft.reportingservices.interfaces.reportoperation.aspx" 보고서에 대한 ReadSubscription이 있고 사용자가 구독 소유자인 경우) 또는 ReadAnySubscription이 있는 경우.

  • 구독 변경: 사용자는 BUILTIN\Administrators 그룹의 구성원이어야 합니다.

  • 자식 목록: 항목의 속성 읽기

  • Fire 이벤트: GenerateEvents(시스템)

SharePoint 모드:

  • 구독 나열: ManageAlerts OR ( HYPERLINK "https://technet.microsoft.com/library/microsoft.sharepoint.spbasepermissions.aspx" 보고서의 CreateAlerts 및 사용자가 구독 소유자이고 구독이 시간 제한 구독임).

  • 구독 변경: ManageWeb

  • 자식 목록: ViewListItems

  • 화재 이벤트: ManageWeb

자세한 내용은 Reporting Services의 역할 및 작업과 SharePoint 그룹 및 권한 비교를 참조하세요.

스크립트 사용

스크립트 파일 만들기(.ps1)

  1. c:\scripts라는 폴더를 만듭니다. 다른 폴더를 선택하는 경우 예제 명령줄 구문 문에 사용되는 폴더 이름을 수정합니다.

  2. 각 스크립트에 대한 텍스트 파일을 만들고 c:\scripts 폴더에 파일을 저장합니다. .ps1 파일을 만들 때 각 예제 명령줄 구문의 이름을 사용합니다.

  3. 관리 권한으로 명령 프롬프트를 엽니다.

  4. 각 예제와 함께 제공되는 샘플 명령줄 구문을 사용하여 각 스크립트 파일을 실행합니다.

테스트된 환경

이 항목의 스크립트는 PowerShell 버전 3 및 다음 버전의 Reporting Services에서 테스트되었습니다.

  • SQL Server 2014

  • SQL Server 2012

  • SQL Server 2008 R2

스크립트: 모든 구독의 소유권 나열

이 스크립트는 사이트의 모든 구독을 나열합니다. 이 스크립트를 사용하여 연결을 테스트하거나 다른 스크립트에서 사용할 보고서 경로 및 구독 ID를 확인할 수 있습니다. 또한 어떤 구독이 존재하고 누가 소유하는지 단순히 감사하는 유용한 스크립트이기도 합니다.

기본 모드 구문

powershell c:\scripts\ListAll_SSRS_Subscriptions.ps1 "[server]/reportserver" "/"

SharePoint 모드 구문

powershell c:\scripts\ListAll_SSRS_Subscriptions.ps1 "[server]/_vti_bin/reportserver" "http://[server]"

스크립트

# Parameters
#    server   - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)

Param(
    [string]$server,
    [string]$site
   )

$rs2010 += New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
$subscriptions += $rs2010.ListSubscriptions($site); # use "/" for default native mode site

Write-Host " "
Write-Host "----- $server's Subscriptions: "
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted, Status

팁 (조언)

SharePoint 모드에서 사이트 URL을 확인하려면 SharePoint cmdlet Get-SPSite를 사용합니다. 자세한 내용은 Get-SPSite를 참조하십시오.

스크립트: 특정 사용자가 소유한 모든 구독 나열

이 스크립트는 특정 사용자가 소유한 모든 구독을 나열합니다. 이 스크립트를 사용하여 연결을 테스트하거나 다른 스크립트에서 사용할 보고서 경로 및 구독 ID를 확인할 수 있습니다. 이 스크립트는 조직의 누군가가 나가고 소유자를 변경하거나 구독을 삭제할 수 있도록 자신이 소유한 구독을 확인하려는 경우에 유용합니다.

기본 모드 구문

powershell c:\scripts\ListAll_SSRS_Subscriptions4User.ps1 "[Domain]\[user]" "[server]/reportserver" "/"

SharePoint 모드 구문

powershell c:\scripts\ListAll_SSRS_Subscriptions4User.ps1 "[Domain]\[user]"  "[server]/_vti_bin/reportserver" "http://[server]"

스크립트

# Parameters:
#    currentOwner - DOMAIN\USER that owns the subscriptions you wish to change
#    server        - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)
#    site        - use "/" for default native mode site
Param(
    [string]$currentOwner,
    [string]$server,
    [string]$site
)

$rs2010 = New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
$subscriptions += $rs2010.ListSubscriptions($site);

Write-Host " "
Write-Host " "
Write-Host "----- $currentOwner's Subscriptions: "
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted,Status | where {$_.owner -eq $currentOwner}

스크립트: 특정 사용자가 소유한 모든 구독에 대한 소유권 변경

이 스크립트는 특정 사용자가 소유한 모든 구독의 소유권을 새 소유자 매개 변수로 변경합니다.

기본 모드 구문

powershell c:\scripts\ChangeALL_SSRS_SubscriptionOwner.ps1 "[Domain]\current owner]" "[Domain]\[new owner]" "[server]/reportserver"

SharePoint 모드 구문

powershell c:\scripts\ChangeALL_SSRS_SubscriptionOwner.ps1 "[Domain]\{current owner]" "[Domain]\[new owner]" "[server]/_vti_bin/reportserver"

스크립트

# Parameters:
#    currentOwner - DOMAIN\USER that owns the subscriptions you wish to change
#    newOwner      - DOMAIN\USER that will own the subscriptions you wish to change
#    server        - server and instance name (e.g. myserver/reportserver, myserver/reportserver_db2, myserver/_vti_bin/reportserver)

Param(
    [string]$currentOwner,
    [string]$newOwner,
    [string]$server
)

$rs2010 = New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
$items = $rs2010.ListChildren("/", $true);

$subscriptions = @();

ForEach ($item in $items)
{
    if ($item.TypeName -eq "Report")
    {
        $curRepSubs = $rs2010.ListSubscriptions($item.Path);
        ForEach ($curRepSub in $curRepSubs)
        {
            if ($curRepSub.Owner -eq $currentOwner)
            {
                $subscriptions += $curRepSub;
            }
        }
    }
}

Write-Host " "
Write-Host " "
Write-Host -foregroundcolor "green" "-----  $currentOwner's Subscriptions changing ownership to $newOwner : "
$subscriptions | select SubscriptionID, Owner, Path, Description,  Status  | format-table -AutoSize

ForEach ($sub in $subscriptions)
{
    $rs2010.ChangeSubscriptionOwner($sub.SubscriptionID, $newOwner);
}

$subs2 = @();

ForEach ($item in $items)
{
    if ($item.TypeName -eq "Report")
    {
        $subs2 += $rs2010.ListSubscriptions($item.Path);
    }
}

스크립트: 특정 보고서와 연결된 모든 구독 나열

이 스크립트는 특정 보고서와 연결된 모든 구독을 나열합니다. 보고서 경로 구문은 전체 URL이 필요한 다른 SharePoint 모드입니다. 구문 예제에서 사용된 보고서 이름은 공백을 포함하는 "제목만"이므로 보고서 이름 주위에 작은따옴표가 필요합니다.

기본 모드 구문

powershell c:\scripts\List_SSRS_One_Reports_Subscriptions.ps1 "[server]/reportserver" "'/reports/title only'" "/"

SharePoint 모드 구문

powershell c:\scripts\List_SSRS_One_Reports_Subscriptions.ps1 "[server]/_vti_bin/reportserver"  "'http://[server]/shared documents/title only.rdl'" "http://[server]"

스크립트

# Parameters:
#    server      - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)
#    reportpath  - path to report in the report server, including report name e.g. /reports/test report >> pass in  "'/reports/title only'"
#    site        - use "/" for default native mode site
Param
(
      [string]$server,
      [string]$reportpath,
      [string]$site
)

$rs2010 = New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
$subscriptions += $rs2010.ListSubscriptions($site);

Write-Host " "
Write-Host " "
Write-Host "----- $reportpath 's Subscriptions: "
$subscriptions | select Path, report, Description, Owner, SubscriptionID, lastexecuted,Status | where {$_.path -eq $reportpath}

스크립트: 특정 구독의 소유권 변경

이 스크립트는 특정 구독에 대한 소유권을 변경합니다. 구독은 스크립트에 전달하는 SubscriptionID로 식별됩니다. 목록 구독 스크립트 중 하나를 사용하여 올바른 SubscriptionID를 확인할 수 있습니다.

기본 모드 구문

powershell c:\scripts\Change_SSRS_Owner_One_Subscription.ps1 "[Domain]\[new owner]" "[server]/reportserver" "/" "ac5637a1-9982-4d89-9d69-a72a9c3b3150"

SharePoint 모드 구문

powershell c:\scripts\Change_SSRS_Owner_One_Subscription.ps1 "[Domain]\[new owner]" "[server]/_vti_bin/reportserver" "http://[server]" "9660674b-f020-453f-b1e3-d9ba37624519"

스크립트

# Parameters:
#    newOwner       - DOMAIN\USER that will own the subscriptions you wish to change
#    server         - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)
#    site        - use "/" for default native mode site
#    subscriptionID - guid for the single subscription to change

Param(
    [string]$newOwner,
    [string]$server,
    [string]$site,
    [string]$subscriptionid
   )
$rs2010 = New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential;

$subscription += $rs2010.ListSubscriptions($site) | where {$_.SubscriptionID -eq $subscriptionid};

Write-Host " "
Write-Host "----- $subscriptionid's Subscription properties: "
$subscription | select Path, report, Description, SubscriptionID, Owner, Status

$rs2010.ChangeSubscriptionOwner($subscription.SubscriptionID, $newOwner)

#refresh the list
$subscription = $rs2010.ListSubscriptions($site) | where {$_.SubscriptionID -eq $subscriptionid}; # use "/" for default native mode site
Write-Host "----- $subscriptionid's Subscription properties: "
$subscription | select Path, report, Description, SubscriptionID, Owner, Status

스크립트: 단일 구독 실행하기

이 스크립트는 FireEvent 메서드를 사용하여 특정 구독을 실행합니다. 스크립트는 구독에 대해 구성된 일정에 관계없이 구독을 즉시 실행합니다. EventType은 보고서 서버 구성 파일에 정의된 알려진 이벤트 집합과 일치 합니다rsreportserver.config 스크립트는 표준 구독에 대해 다음 이벤트 유형을 사용합니다.

<Event>

<Type>TimedSubscription</Type>

</Event>

구성 파일에 대한 자세한 내용은 RSReportServer 구성 파일을 참조하세요.

스크립트에는 지연 논리 "Start-Sleep -s 6"가 포함되어 있어, 이벤트가 발생한 후 ListSubscription 메서드를 통해 업데이트된 상태를 사용할 수 있을 때까지 시간이 주어집니다.

기본 모드 구문

powershell c:\scripts\FireSubscription.ps1 "[server]/reportserver" $null "70366e82-2d3c-4edd-a216-b97e51e26de9"

SharePoint 모드 구문

powershell c:\scripts\FireSubscription.ps1 "[server]/_vti_bin/reportserver" "http://[server]" "c3425c72-580d-423e-805a-41cf9799fd25"

스크립트

# Parameters
#    server         - server and instance name (e.g. myserver/reportserver or myserver/reportserver_db2)
#    site           - use $null for a native mode server
#    subscriptionid - subscription guid

Param(
  [string]$server,
  [string]$site,
  [string]$subscriptionid
  )

$rs2010 = New-WebServiceProxy -Uri "http://$server/ReportService2010.asmx" -Namespace SSRS.ReportingService2010 -UseDefaultCredential ;
#event type is case sensative to what is in the rsreportserver.config
$rs2010.FireEvent("TimedSubscription",$subscriptionid,$site)

Write-Host " "
Write-Host "----- Subscription ($subscriptionid) status: "
#get list of subscriptions and filter to the specific ID to see the Status and LastExecuted
Start-Sleep -s 6 # slight delay in processing so ListSubscription returns the updated Status and LastExecuted
$subscriptions = $rs2010.ListSubscriptions($site); 
$subscriptions | select Status, Path, report, Description, Owner, SubscriptionID, EventType, lastexecuted | where {$_.SubscriptionID -eq $subscriptionid}

또한 참조하십시오

ListSubscriptions ChangeSubscriptionOwner ListChildren FireEvent