Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
| Gilt für: Reporting Services (einheitlicher Modus) | Reporting Services (SharePoint-Modus) |
In diesem Thema:
Skript: Auflisten aller Abonnements im Besitz eines spezifischen Benutzers
Skript: Ändern des Besitzes aller Abonnements eines spezifischen Benutzers
Skript: Auflisten aller Abonnements im Zusammenhang mit einem bestimmten Bericht
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:
Die Methode ReportingService2010.FireEvent wird nur im letzten Skript verwendet, um zu veranlassen, dass ein bestimmtes Abonnement ausgeführt wird. Wenn Sie nicht beabsichtigen, dieses Skript zu verwenden, können Sie die Berechtigungsanforderungen für die FireEvent-Methode ignorieren.
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)
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.
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.
Öffnen Sie eine Eingabeaufforderung mit Administratorberechtigungen.
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