2013-04-24 8 views
14

はコマンドを冗長モードで実行された場合に詳細な情報を提供するために使用されます。私はいくつかのスクリプトをリモートで実行しており、冗長な出力をキャプチャしたいと考えています。ただし、Invoke-Commandは冗長なチャネルをキャプチャしていないようです。Invoke-Commandから書込みを行う方法PowerShellの</p> <p><code>Write-Verbose</code>と<code>-Verbose</code>フラグに

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

リモートスクリプトを実行しているときに冗長な出力をキャプチャするにはどうすればよいですか?

+1

これはPowerShellのバグです。バグリクエストを作成しました。https://connect.microsoft.com/PowerShell/feedback/details/806241/invoke-command-does-not-pass-the-verbose-parameter-toで投票できます-remote-session – deadlydog

答えて

10

はそれをこの方法を試してみてください:私はあなたが行うことができると思い

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

'-Verbose'フラグがVerbosePreferenceをリモートコンテキストに渡さないほど冗長なチャネルがキャプチャされないというわけではありません。どのようにスクリプト自体を変更せずにリモートVerbosePreferenceを設定する任意のアイデア? –

+0

私はinvoke-commandの中でそれを行う方法を知らない。あなたはデフォルトの設定を持つカスタムセッションを作成し、そのセッションにあなたのinvoke-commnadを指定することができます。そのprefernce変数のデフォルトは 'SilentlyContinue'です。invoke-commandで唯一指定できるのは、スクリプトブロック内でそれをリセットすることだけです。 – mjolinor

+1

例で-Verboseスイッチが実行していることはenablineローカル$ VerbosePreferenceがdisplyに設定されている場合、invoke-commandコマンドレットの詳細な出力です。残念ながら、冗長な出力は生成されないため、基本的には何もしません。 – mjolinor

13

最善のことは[CmdletBinding()]は関数を作成しているので、-verboseスイッチをサポートしています。次に、ローカルの$ VerbosePreferenceを使用してローカル関数の冗長な状態を取得し、それをinvokeコマンドで渡すことができます。これは、$ Usingスコープ修飾子を使用する必要があるため、Powershell 3.0以降でのみ機能します。

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

次に、このような関数を呼び出します。

Write-Blah -verbose 

このテストではうまくいきました。私は、あなたの関数がパラメータをサポートしなければならないと考えています。空のParam()ブロックです。

+1

より一般的な回答です。 – Moerwald

関連する問題