Powershell Invoke-Sqlcmd erfasst ausführliche Ausgabe

8

Ich versuche, die ausführliche Ausgabe von Invoke-Sqlcmd in Powershell zu erfassen. Jeder hat irgendwelche Ideen, dies zu tun:

d.

%Vor%

Die Datei SqlLog.txt sollte den Text "Hello World!" enthalten

    
Simmo 22.12.2010, 16:50
quelle

8 Antworten

8

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%     
Scott Saad 24.12.2010, 00:34
quelle
7

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.

    
Jana Sattainathan 28.02.2014 16:59
quelle
3

Bitte versuchen Sie:

%Vor%

Ich habe es gefunden

    
bernd_k 22.12.2010 17:06
quelle
2

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.

    
user432532 19.12.2014 20:09
quelle
1

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 Ссылка

    
Chad Miller 23.12.2010 03:32
quelle
1

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"

Ссылка

    
Steve 19.10.2012 01:46
quelle
1

In Powershell 3 * * & gt; & gt; hängt alle Ausgaben (einschließlich Verbose) an eine Datei an

%Vor%     
Ries Vriend 04.03.2016 12:08
quelle
0

Für mich funktionierte der folgende Befehl:

%Vor%

Ich verwende Powershell 5.1 unter Windows 2016 mit SQL Enterprise 2016

    
ExploringApple 16.11.2017 09:06
quelle

Tags und Links