在PowerShell中如何寫入從調用命令詳細?
Write-Verbose
和-Verbose
標誌用於在詳細模式下運行命令時提供詳細信息。我正在遠程運行一些腳本,並希望捕獲詳細的輸出輸出。但是,Invoke-Command
似乎無法捕獲詳細信道。
PS:> Invoke-Command -ComputerName MY-COMPUTERNAME -Verbose { Write-Verbose "blah" }
PS:>
如何在運行遠程腳本時捕獲詳細輸出?
在PowerShell中如何寫入從調用命令詳細?
Write-Verbose
和-Verbose
標誌用於在詳細模式下運行命令時提供詳細信息。我正在遠程運行一些腳本,並希望捕獲詳細的輸出輸出。但是,Invoke-Command
似乎無法捕獲詳細信道。
PS:> Invoke-Command -ComputerName MY-COMPUTERNAME -Verbose { Write-Verbose "blah" }
PS:>
如何在運行遠程腳本時捕獲詳細輸出?
試試這樣說:
我覺得你可以做Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference='Continue'; Write-Verbose "blah" }
我明白了,所以並不是因爲-Verbose標誌沒有將VerbosePreference傳遞到遠程上下文中,而是沒有捕獲詳細的通道(它甚至會做什麼?)。任何想法如何設置遠程VerbosePreference而不修改腳本本身? – 2013-04-24 16:38:04
我不知道如何在invoke-command中執行該操作。您可以創建一個具有該首選項的自定義會話,因爲它是默認的,然後將您的invoke-commnad作爲該會話的目標。但是這個prefernce變量的默認值是'SilentlyContinue',並且你使用invoke-command的唯一選項是在腳本塊中重置它。 – mjolinor 2013-04-24 16:48:30
在您的示例中,-Verbose開關正在執行的操作是,如果您的本地$ VerbosePreference設置爲顯式調用,invoke-command cmdlet的enabline Verbose輸出。不幸的是,它似乎沒有產生任何詳細的輸出,所以基本上它什麼都不做。 – mjolinor 2013-04-24 16:51:36
最好的事情是創建具有[列出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
在測試中,這對我有效。我相信你的函數必須支持參數,因此是空的參數()塊。
最好的答案,因爲它更通用。 – Moerwald 2017-06-29 11:59:00
看起來像這是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