Ich verwende Powershell, um mehrere Berichte über Microsoft SQL Report Services auszuführen und die Ergebnisse in einem Word-Dokument zu speichern. Ich habe ein Skript, mit Funktionen, die die Kommunikation mit dem Report Server behandeln:SSRS und Powershell: Parameter nicht akzeptiert
## File "qrap-functions.ps1"
function GetRSConnection($server, $instance)
{
$User = "xxxx"
$PWord = ConvertTo-SecureString -String "yyyy" -AsPlainText -Force
$c = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$reportServerURI = "http://" + $server + "/" + $instance + "/ReportExecution2005.asmx?WSDL"
$RS = New-WebServiceProxy -Class 'RS' -NameSpace 'RS' -Uri $reportServerURI -Credential $c
$RS.Url = $reportServerURI
return $RS
}
function GetReport($RS, $reportPath)
{
$reportPath = "/" + $reportPath
#$reportPath
$Report = $RS.GetType().GetMethod("LoadReport").Invoke($RS, @($reportPath, $null))
$parameters = @()
$RS.SetExecutionParameters($parameters, "nl-nl") > $null
return $report
}
function AddParameter($params, $name, $val)
{
$par = New-Object RS.ParameterValue
$par.Name = $name
$par.Value = $val
$params += $par
return ,$params
}
function GetReportInFormat($RS, $report, $params, $format, $saveas)
{
$deviceInfo = "<DeviceInfo><NoHeader>True</NoHeader></DeviceInfo>"
$extension = ""
$mimeType = ""
$encoding = ""
$warnings = $null
$streamIDs = $null
$RS.SetExecutionParameters($params, "nl-nl") > $null
$RenderOutput = $RS.Render($format,
$deviceInfo,
[ref] $extension,
[ref] $mimeType,
[ref] $encoding,
[ref] $warnings,
[ref] $streamIDs
)
$Stream = New-Object System.IO.FileStream($saveas), Create, Write
$Stream.Write($RenderOutput, 0, $RenderOutput.Length)
$Stream.Close()
}
Dann habe ich ein Skript, das einen Bericht mit der finanziellen Quartalsdaten ausführt. Dieses Skript läuft gut:
## File "qrap-financieel.ps1"
. "./qrap-functions.ps1"
$saveas = "e:\test\financieel.doc"
$RS = GetRSConnection -server "MSZRDWH" -instance "reportserver_acc"
$report = GetReport -RS $RS -reportPath "kwartaalrapportage/kwartaalrapportage financieel"
$params = @()
$kwartaal = "[Periode Maand].[Jaar Kwartaal].&[2015-2]"
$kptc = "[Kostenplaats].[Team code].&[2003]"
$params = AddParameter -params $params -name "PeriodeMaandJaarKwartaal" -val $kwartaal
$params = AddParameter -params $params -name "KostenplaatsTeamcode" -val $kptc
GetReportInformat -RS $RS -report $report -params $params -format "WORD" -saveas $saveas
Die Werte für $kwartaal
und $kptc
sind hartcodierte hier, aber sind Parameter in der aktuellen Version dieses Skripts. Neben dem vierteljährlichen Finanzbericht haben wir drei weitere Quartalsberichte, die von diesem Skript ausgegeben werden müssen. Zwei von diesen laufen gut, in der vierten kann ich nicht scheinen, einen der Parameter richtig zu bekommen. Das Skript für diese eine ist:
## File "qrap-zorglog.ps1"
. "./qrap-functions.ps1"
$RS = GetRSConnection -server "MSZRDWH" -instance "reportserver_acc"
$report = GetReport -RS $RS -reportPath "kwartaalrapportage/kwartaalrapportage zorglogistiek"
$s = "Urologie"
$saveas = "e:\test\ZL Urologie.doc"
$params = @()
$kwartaal = "[Periode Maand].[Jaar Kwartaal].&[2015-2]"
$params = AddParameter -params $params -name "HoofdspecialismeSpecialismeOms" -val "[Hoofdspecialisme].[Specialisme Oms].&[$s]"
$params = AddParameter -params $params -name "PeriodeMaandJaarKwartaal" -val $kwartaal
$params = AddParameter -params $params -name "WachttijdenSpecialismeSpecialisme" -val "[Wachttijden Specialisme].[Specialisme].&[$s]"
$params = AddParameter -params $params -name "SpecialisatieGroeperingSpecialisatieGroeperingOms" -val "[Specialistie Groepering].[Specialistie Groepering Oms].&[$s]"
$params = AddParameter -params $params -name "AanvragendSpecialismeSpecialismeOms" -val "[AanvragendSpecialisme].[Specialisme Oms].&[$s]"
GetReportInformat -RS $RS -report $report -params $params -format "WORD" -saveas $saveas
Wenn ich dieses Skript ausführen, bekomme ich diesen Fehler:
Exception calling "Render" with "7" argument(s): "System.Web.Services.Protocols.SoapException: This report requires a
default or user-defined value for the report parameter 'HoofdspecialismeSpecialismeOms'. To run or subscribe to this
report, you must provide a parameter value. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportParameterValueNot
SetException: This report requires a default or user-defined value for the report parameter
'HoofdspecialismeSpecialismeOms'. To run or subscribe to this report, you must provide a parameter value.
I DO eindeutig einen Wert für 'HoofdspecialismeSpecialismeOms' liefern; Ich habe vorher bemerkt, dass dieser Fehler auch ausgelöst wird, wenn der Parameter nicht im erwarteten Format ist. Dieses Format, da der Berichtsfilter auf einer Hierarchie in einem SSAS-Cube basiert, sieht folgendermaßen aus: [hierarchy].[sub-level].&[member]
. Ich habe sichergestellt, dass [Hoofdspecialisme].[Specialisme Oms].&[$s]
ist das richtige Format von nachschlagen in der Abfrage, die die Eingabeaufforderung in SSRS füllt. Der Bericht zeigt Daten an, wenn er über SSRS ausgeführt wird - und er nimmt einen Parameter von der Eingabeaufforderung.
Ich habe festgestellt, dass dieser Parameter Mehrfachauswahl ermöglicht. Ich glaube jedoch nicht, dass dies zu dem Fehler führt, da dies auch für AanvragendSpecialismeSpecialismeOms
gilt.
Eine Idee, warum dieser eine Parameter nicht in den Bericht eingegeben werden kann, wenn er GetReportInformat
aufruft?
ich mit Powershell nicht gearbeitet haben viel, aber haben Sie versucht, ohne die zusätzlichen Räume zwischen den Parametern? Es ist durch Leerzeichen begrenzt. –
@HannoverFist Ich habe gerade versucht, das Skript ohne die zusätzlichen Leerzeichen und Tabulatoren zwischen den Parametern '-name' und' -val' auszuführen, aber kein Glück. Ich bekomme immer noch den gleichen Fehler. Das Verschieben von 'HoofdspecialismeSpecialismeOms' in der Reihenfolge der Parameter ändert auch nichts. – steenbergh
@Matt Sie haben Recht mit '$ q'. In meinem Skript ist das ein Parameter. Write-Host sagt mir, dass dies genau so gelöst wird, wie ich es möchte. Ich habe die Frage bearbeitet, um diesen Wert zu beheben. Das Skript hat eine Definition für "$ s", dies ist jedoch "Urologie". – steenbergh