2013-04-24 48 views
14

在PowerShell中如何寫入從調用命令詳細?

Write-Verbose-Verbose標誌用於在詳細模式下運行命令時提供詳細信息。我正在遠程運行一些腳本,並希望捕獲詳細的輸出輸出。但是,Invoke-Command似乎無法捕獲詳細信道。

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

如何在運行遠程腳本時捕獲詳細輸出?

+1

看起來像這是PowerShell的錯誤。我創建了一個bug請求,您可以通過https://connect.microsoft.com/PowerShell/feedback/details/806241/invoke-command-does-not-pass-the-verbose-parameter-to進行投票-remote-session – deadlydog 2013-10-22 22:07:03

回答

10

試試這樣說:

我覺得你可以做
Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference='Continue'; Write-Verbose "blah" } 
+0

我明白了,所以並不是因爲-Verbose標誌沒有將VerbosePreference傳遞到遠程上下文中,而是沒有捕獲詳細的通道(它甚至會做什麼?)。任何想法如何設置遠程VerbosePreference而不修改腳本本身? – 2013-04-24 16:38:04

+0

我不知道如何在invoke-command中執行該操作。您可以創建一個具有該首選項的自定義會話,因爲它是默認的,然後將您的invoke-commnad作爲該會話的目標。但是這個prefernce變量的默認值是'SilentlyContinue',並且你使用invoke-command的唯一選項是在腳本塊中重置它。 – mjolinor 2013-04-24 16:48:30

+1

在您的示例中,-Verbose開關正在執行的操作是,如果您的本地$ VerbosePreference設置爲顯式調用,invoke-command cmdlet的enabline Verbose輸出。不幸的是,它似乎沒有產生任何詳細的輸出,所以基本上它什麼都不做。 – mjolinor 2013-04-24 16:51:36

13

最好的事情是創建具有[列出CmdletBinding()的函數,因此支持-verbose開關。然後,您將能夠使用本地$ VerbosePreference捕獲本地函數的詳細狀態,並在invoke命令中傳遞它。這隻適用於Powershell 3.0及更高版本,因爲您需要使用$ Using範圍修飾符。

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

然後,你會打電話給你的這個功能。

Write-Blah -verbose 

在測試中,這對我有效。我相信你的函數必須支持參數,因此是空的參數()塊。

+1

最好的答案,因爲它更通用。 – Moerwald 2017-06-29 11:59:00