Da das Erfassen ausführlicher Ausgaben nicht einfach über die nativen Konstrukte des PowerShell-Hosts erfolgen kann, können Sie immer den programmatischen Zugriff auf PowerShell-Objekt . Sie können dann auf die fünf verschiedenen Informationsströme zugreifen:
%Vor%Nach Capture Warning, Verbose, Debug und Host-Ausgabe über alternative Streams :
... wenn ich eine ausführliche Ausgabe in einem Skript erfassen wollte:
stop-process -n vd * -verbose 4 & gt; & amp; 1 & gt; C: \ Logs \ StoppedProcesses.log
Sie würden also etwas wie
tun %Vor%Wo 4 der "ausführliche" Stream ist.
Ich weiß also, dass dies etwas nicht verwandt ist, aber ich musste die "RAISERROR" - und "PRINT" -Anweisungen in einer separaten Variablen und dann in den Zeilendaten erfassen. Hier ist, wie ich es gemacht habe:
$Messages = %{ $Rows = Invoke-Sqlcmd -Query "PRINT 'Hello World!';" -ServerInstance $Server -verbose} 4>1
Die Zeilendaten von Invoke-SqlCmd befinden sich auf STDOUT, was von $ Rows konsumiert wird. Die ausführliche Ausgabe wird auf der Pipe fortgesetzt und in STDOUT umgeleitet (was dank $ Rows leer ist). Das einzige, was in STDOUT an $ Messages übergeben wird, ist die Verbose-Ausgabe. Puh!
Es ist ein wenig komplizierter darin, zu den Daten zu kommen, die jetzt auf $ Messages.Message sind.
Das Erfassen ausführlicher Ausgaben ist schwierig. Der einzige Beitrag, den ich zu diesem Thema gesehen habe, ist hier: Ссылка
Eine einfachere Option wäre, verbose nicht zu verwenden und in write-output zu konvertieren. Sie könnten die Funktion invoke-sqlcmd2 so ändern, dass stattdessen die Schreibausgabe verwendet wird Ссылка
Wenn Sie nur Anweisungen zum Ausdrucken wünschen, fügen Sie einfach -Verbose am Ende des Befehls hinzu.
z. Invoke-Sqlcmd-Abfrage $ Abfrage -ServerInstance $ Server -Datenbank "Master" -Verbose
Kann in Kombination mit Out-File verwendet werden: -
Invoke-Sqlcmd -InputFile "C: \ MeinFolder \ TestSQLCmd.sql" | Out-File-Dateipfad "C: \ MyFolder \ TestSQLCmd.rpt"
In Powershell 3 * * & gt; & gt; hängt alle Ausgaben (einschließlich Verbose) an eine Datei an
%Vor%Für mich funktionierte der folgende Befehl:
%Vor%Ich verwende Powershell 5.1 unter Windows 2016 mit SQL Enterprise 2016
Tags und Links powershell