Von Haus aus können SQL-Reports nur zeitgesteuert oder manuell generiert werden. Aber mit Powershell geht es auch als SQL-Job. SQL-Server Reporting-Services bietet die Möglichkeit, einen Report automatisch zu generieren und zu verschicken. Dies geschieht allerdings zeitgesteuert - eine jobgesteuerte Generierung ist von Haus aus nicht möglich. Zum Glück werden die Reporting-Services aber über einen Webdienst angesteuert, und dies kann man sich über ein Script nutzbar machen. In diesem Beispiel verwenden wir Powershell in einem SQL-Server Agent-Job. Es handelt sich hierbei nur um ein Funktionsbeispiel und muß natürlich noch angepasst werden. Außerdem ist zu beachten, dass das ausführende Konto über "Generate Events"-Rechte auf dem Report-Server verfügen muß, über die auch der Admin standardmässig nicht verfügt!
# Der URI zum Report-Server Webdienst für SQL 2008 R2
$RSService = "http://localhost/ReportServer/ReportService2010.asmx?wsdl"
# Aufruf mit Default-Credentials
$RSServiceProxy = New-WebServiceProxy -uri $RSService -class RS2 -Namespace ReportingWebservice -UseDefaultCredential
# Alterantiv aufruf mit einem anderen Benutzernamen - die Credentials werden im Beispiel per Eingabefenster abgefragt.
$RSServiceProxy = New-WebServiceProxy -uri $RSService -class RS2 -Namespace ReportingWebservice -Credential Get-Credential
# Anzeigen der verfügbaren Subscriptions
$RSServiceProxy.ListSubscriptions("")
# Speichern der ID des Jobs "Sales_Order_Details_2008R2
$id = $RSServiceProxy.ListSubscriptions("") | where Report -eq "Sales_Order_Detail_2008R2" | select subscriptionID -ExpandProperty
# Starten des Jobs
$RSServiceProxy.FireEvent("TimedSubscription",$id,"") # Achtung! Bei älteren Versionen gibt es den 3. Parameter (site, für Sharepoint-Integrated), nicht!
Für ältere Reporting-Services müssen die ersten beiden Zeilten lauten:
# Der URI zum Report-Server Webdienst für SQL 2005
$RSService = "http://localhost/ReportServer/ReportExecution2005.asmx?wsdl"
$RSService = New-WebServiceProxy -uri $ReportExec -class RS -Namespace ReportingExecWebservice -UseDefaultCredentials