Freigeben über


Verwenden Sie PowerShell zum Ändern und Auflisten der Besitzer von Reporting Services-Abonnements und zum Ausführen eines Abonnements.

Ab SQL Server 2008 R2Reporting Services können Sie programmgesteuert den Besitz eines Reporting Services-Abonnements von einem Benutzer auf einen anderen übertragen. Dieses Thema enthält mehrere Windows PowerShell-Skripts, die Sie verwenden können, um den Besitz von Abonnements zu ändern oder einfach auflisten zu können. Jedes Beispiel enthält Beispielsyntax sowohl für den einheitlichen als auch den SharePoint-Modus. Nachdem Sie den Abonnementbesitzer geändert haben, wird das Abonnement im Sicherheitskontext des neuen Besitzers ausgeführt, und das User!UserID-Feld im Bericht zeigt den Wert des neuen Besitzers an. Weitere Informationen zum Objektmodell des PowerShell-Beispielaufrufs finden Sie unter ChangeSubscriptionOwner

PowerShell-Inhalte

Gilt für: Reporting Services (einheitlicher Modus) | Reporting Services (SharePoint-Modus)

In diesem Thema:

Gewusst wie: Verwenden der Skripts

Erlaubnisse

In diesem Abschnitt werden die erforderlichen Berechtigungsstufen für die Verwendung der jeweiligen Methoden für Reporting Services im einheitlichen und im SharePoint-Modus zusammengefasst. Die Skripts in diesem Thema verwenden die folgenden Reporting Services-Methoden:

Einheitlicher Modus :

  • Abonnements auflisten: (HYPERLINK "https://technet.microsoft.com/library/microsoft.reportingservices.interfaces.reportoperation.aspx" ReadSubscription für den Bericht und der Benutzer ist der Besitzer des Abonnements) oder ReadAnySubscription

  • Abonnements ändern: Der Benutzer muss ein Mitglied der Gruppe "BUILTIN\Administrators" sein.

  • Untergeordnete Elemente auflisten: ReadProperties für das Element

  • Ereignis auslösen: GenerateEvents (System)

SharePoint-Modus:

  • Abonnements auflisten: ManageAlerts ODER ( HYPERLINK "https://technet.microsoft.com/library/microsoft.sharepoint.spbasepermissions.aspx" CreateAlerts im Bericht UND der Benutzer ist der Abonnementinhaber und das Abonnement ist ein zeitlich festgelegtes Abonnement).

  • Abonnements ändern: ManageWeb

  • Untergeordnete Elemente auflisten: ViewListItems

  • Ereignis auslösen: ManageWeb

Weitere Informationen finden Sie unter "Vergleichen von Rollen und Aufgaben in Reporting Services" mit SharePoint-Gruppen und -Berechtigungen.

Skriptverwendung

Erstellen von Skriptdateien (.ps1)

  1. Erstellen Sie einen Ordner mit dem Namen c:\scripts. Wenn Sie einen anderen Ordner auswählen, ändern Sie den In den Beispiel-Befehlszeilensyntaxanweisungen verwendeten Ordnernamen.

  2. Erstellen Sie eine Textdatei für jedes Skript, und speichern Sie die Dateien im Ordner c:\scripts. Wenn Sie die .ps1 Dateien erstellen, verwenden Sie den Namen aus jeder Beispiel-Befehlszeilensyntax.

  3. Öffnen Sie eine Eingabeaufforderung mit Administratorberechtigungen.

  4. Führen Sie jede Skriptdatei mithilfe der Beispiel-Befehlszeilensyntax aus, die für jedes Beispiel bereitgestellt wird.

Getestete Umgebungen

Die Skripts in diesem Thema wurden auf PowerShell Version 3 und mit den folgenden Versionen von Reporting Services getestet:

  • SQL Server 2014

  • SQL Server 2012

  • SQL Server 2008 R2

Skript: Auflisten des Besitzes aller Abonnements

Dieses Skript listet alle Abonnements auf einer Site auf. Sie können dieses Skript verwenden, um Ihre Verbindung zu testen oder den Berichtspfad und die Abonnement-ID für die Verwendung in den anderen Skripts zu überprüfen. Dies ist auch ein nützliches Skript, um einfach zu überwachen, welche Abonnements vorhanden sind und wer sie besitzt.

Syntax im nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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

Tipp

Verwenden Sie das SharePoint-Cmdlet Get-SPSite, um Website-URLs im SharePoint-Modus zu verifizieren. Weitere Informationen finden Sie unter Get-SPSite.

Skript: Auflisten aller Abonnements, die ein bestimmter Benutzer besitzt

Dieses Skript listet alle Abonnements auf, die ein bestimmter Benutzer besitzt. Sie können dieses Skript verwenden, um Ihre Verbindung zu testen oder den Berichtspfad und die Abonnement-ID für die Verwendung in den anderen Skripts zu überprüfen. Dieses Skript ist nützlich, wenn jemand in Ihrer Organisation verlässt und Sie überprüfen möchten, welche Abonnements sie besitzen, damit Sie den Besitzer ändern oder das Abonnement löschen können.

Syntax des nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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}

Skript: Ändern des Besitzes aller Abonnements, die ein bestimmter Benutzer besitzt

Dieses Skript ändert den Besitz für alle Abonnements, die ein bestimmter Benutzer besitzt, zum neuen Besitzerparameter.

Syntax im nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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);
    }
}

Skript: Auflisten aller Abonnements, die mit einem bestimmten Bericht verknüpft sind

Dieses Skript listet alle Abonnements auf, die mit einem bestimmten Bericht verknüpft sind. Die Berichtspfadsyntax ist ein anderer SharePoint-Modus, der eine vollständige URL erfordert. In den Syntaxbeispielen ist der verwendete Berichtsname "nur Titel", der ein Leerzeichen enthält und daher die einzelnen Anführungszeichen um den Berichtsnamen erfordert.

Syntax im nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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}

Skript: Ändern des Besitzes eines bestimmten Abonnements

Dieses Skript ändert den Besitz eines bestimmten Abonnements. Das Abonnement wird durch die SubscriptionID identifiziert, die Sie an das Skript übergeben. Sie können eines der Skripts zur Auflistung von Abonnements verwenden, um die korrekte SubscriptionID zu bestimmen.

Syntax für den nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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

Skript: Ausführen (Auslösen) eines einzelnen Abonnements

Dieses Skript führt ein bestimmtes Abonnement mit der FireEvent-Methode aus. Das Skript führt das Abonnement unabhängig vom für das Abonnement konfigurierten Zeitplan sofort aus. Der EventType wird mit dem bekannten Satz von Ereignissen abgeglichen, die in der Berichtsserverkonfigurationsdatei definiert sind ,rsreportserver.config Das Skript verwendet den folgenden Ereignistyp für Standardabonnements:

<Event>

<Type>TimedSubscription</Type>

</Event>

Weitere Informationen zur Konfigurationsdatei finden Sie in der RSReportServer-Konfigurationsdatei.

Das Skript enthält verzögerungslogik "Start-Sleep -s 6", sodass es Zeit nach dem Auslösen des Ereignisses gibt, damit der aktualisierte Status mit der ListSubscription-Methode verfügbar ist.

Syntax des nativen Modus

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

Syntax des SharePoint-Modus

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

Skript

# 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}

Siehe auch

ListSubscriptions ChangeSubscriptionOwner ListChildren FireEvent