簡體   English   中英

PowerShell 捕獲寫入主機輸出

[英]PowerShell Capture Write-Host output

我必須運行 Microsoft cmdlet,並且使用 cmdlet 中的 Write-Host 行將重要信息寫入控制台。

它沒有返回,所以我不能做 $result = Commandlet ......返回了一個對我沒有用的不同值,我實際需要的是打印到命令行開關中的控制台,無論如何我可以“嗅探”或“抓取'控制台以獲取我想要的信息?

$result = Test-Cluser

Test-Cluster 將打印如下內容:'HadUnselectedTests'、'ClusterConditionallyApproved' 等。但它在 .htm 報告文件的路徑中返回的值。 不幸的是,.htm 報告文件不包含這些狀態代碼之一,所以我也不能只為它解析 .htm 文件。

有什么建議?

注意:至於為什么不應該使用Write-Host輸出數據,請參閱此答案

PSv5+ 中

$result = Test-Cluster 6>&1

從版本 5 開始, Write-Host寫入新引入的信息流,其編號為6

6>&1將該流重定向到成功輸出流(編號1 ),以便它也可以在$result捕獲。


PSv4- 中

無法在會話中捕獲Write-Host輸出

唯一的解決方法是使用指定為string的目標命令啟動另一個 Powershell 實例
注意事項:

  • 這樣的調用很慢,
  • 防止使用原始數據類型傳遞參數
  • 總是只返回字符串數據(文本行)
  • 返回所有輸出流的輸出,包括錯誤輸出
$result = powershell -noprofile -command 'Test-Cluster'

需要注意的是使用腳本塊來傳遞命令( -command { Test-Cluster } )是行不通的,因為PowerShell中則使用了序列化和反序列化,以模擬在會話的行為。


可選閱讀:PowerShell 中的輸出流以及如何重定向它們:

Get-Help about_Redirection討論了所有輸出流的列表,可以通過它們的數字來定位; 從 PSv5 開始,這些是:

1 ... success output stream (implicit output and Write-Output output)
2 ... error output stream (Write-Error and unhandled errors)
3 ... warnings (Write-Warning)
4 ... verbose output (Write-Verbose)
5 ... debug output (Write-Debug)
6 ... (v5+) Write-Information and Write-Host output

請注意,某些流默認情況下是靜默的,需要選擇加入以通過首選項變量(例如$VerbosePreference )或公共參數(例如-Verbose )來生成輸出

  • {n}>允許重定向數字{n}流; 如果省略{n} ,則隱含1

    • 到文件(例如, 3> c:/tmp/warnings.txt
    • 到“無處”,即抑制輸出(例如, 3> $null
    • 到成功輸出流(例如, 3>&1 ); 注意:只能以這種方式定位流1
  • *>所有輸出流為目標。

注:不同於POSIX樣彈(如bash ),重定向表達的順序並不重要。

因此,以下類似 POSIX 的 shell 習慣用法 - 將錯誤輸出重定向到成功流並使原始成功輸出靜音 - 不起作用:

... 2>&1 1>$null # !! NO output in PowerShell

要在 PowerShell 中實現這一點,您不能重定向1 ,而是通過源流過濾成功中的對象。

舉個例子:最后,OP 想要以下內容:只捕獲警告輸出,沒有常規(成功)輸出:

Test-Cluster 3>&1 | Where-Object { $_ -is [System.Management.Automation.WarningRecord] }

來自警告流的對象具有[System.Management.Automation.WarningRecord]類型,這是啟用上述過濾的原因。

我使用 *> 而不是 > 將所有輸出從控制台重定向到文件。

將文本和變量重定向到文件的示例:

""+$set_groups+"ADGroup 設置!" | Out-File -FilePath $log_path -Append

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM