2013-04-24 6 views
14

In PowerWie schreibe-Verbose von Invoke-Command?

Write-Verbose und den -Verbose Flag verwendet ausführliche Informationen zu liefern, wenn Befehle in ausführlichem Modus ausgeführt werden. Ich führe einige Skripts aus der Ferne aus und möchte die ausführliche Ausgabe erfassen. Invoke-Command scheint jedoch den ausführlichen Kanal nicht zu erfassen.

PS:> Invoke-Command -ComputerName MY-COMPUTERNAME -Verbose { Write-Verbose "blah" } 
PS:> 

Wie erfasse ich ausführliche Ausgabe beim Ausführen von Remote-Skripts?

+1

Sieht aus wie dies ein Fehler mit PowerShell ist. Ich habe eine Fehleranfrage erstellt, die Sie unter https://connect.microsoft.com/PowerShell/feedback/details/806241/invoke-command-does-not-pass-the-verbose-parameter-to nach oben abstimmen können -remote-session – deadlydog

Antwort

10

Versuchen Sie es so:

Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference='Continue'; Write-Verbose "blah" } 
+0

Ich sehe, also ist es nicht so, dass der ausführliche Kanal nicht so stark erfasst wird, wie das '-Verbose'-Flag die VerbosePreference nicht in den Remote-Kontext übergibt (was zum Teufel macht es dann überhaupt?). Irgendeine Idee, wie man die entfernte VerbosePreference einstellt, ohne das Skript selbst zu modifizieren? –

+0

Ich kenne keine Möglichkeit, das nur innerhalb von invoke-command zu tun. Sie können eine benutzerdefinierte Sitzung mit dieser Vorgabe als Standard erstellen und dann Ihre invoke-commnad auf diese Sitzung ausrichten. Der Standardwert für diese Vorzugsvariable ist jedoch 'SilentlyContinue', und die einzige Option, die Sie mit invoke-command haben, besteht darin, sie im Skriptblock zurückzusetzen. – mjolinor

+1

Was der -Verbose-Schalter in Ihrem Beispiel tut, ist die Verbose-Ausgabe des Cmdlet invoke-command, wenn Ihre lokale $ VerbosePreference auf disply eingestellt ist. Leider scheint es keine ausführliche Ausgabe zu erzeugen, also tut es im Grunde nichts ... – mjolinor

13

Das Beste, was ich denke, Sie tun können, ist eine Funktion erstellen, hat [CmdletBinding()], so unterstützt es die -verbose Schalter. Dann könnten Sie den ausführlichen Status der lokalen Funktion mit der lokalen $ VerbosePreference erfassen und im Befehl invoke übergeben. Dies funktioniert nur in Powershell 3.0 und höher, da Sie den Konvertierungsoperator $ Using verwenden müssen.

Function write-blah{ 
[CmdletBinding()] 
Param() 
Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference=$Using:VerbosePreference; Write-Verbose "blah" } 
} 

Dann würden Sie Ihre Funktion so nennen.

Write-Blah -verbose 

Im Test hat dies für mich funktioniert. Ich glaube, dass Ihre Funktion Parameter unterstützen muss, daher der leere Param() - Block.

+1

Vorzuziehende Antwort, da es generischer ist. – Moerwald