[英]Powershell Script output to variable - capture Write-Host output
使用此腳本: https ://github.com/byterogues/powershell-bittrex-api 我從另一個腳本調用它。
例如
$order = .\bittrex-api.ps1 -action buylimit -market BTC-TX -quantity 1 -rate 0.00011300
bittrex-api.ps1 捕獲錯誤並在屏幕上顯示
BITTREX 錯誤:API 查詢返回錯誤。 錯誤信息:MIN_TRADE_REQUIREMENT_NOT_MET
如何將 bittrex-api.ps1 的輸出捕獲到一個變量中,以便我可以在我的基本腳本中使用這個變量?
你不能。 該腳本使用Write-Host
輸出錯誤。 Write-Host
只向控制台寫入文本,它不返回任何對象,這意味着沒有什么可捕獲的。
我建議修改腳本以使用其他 cmdlet,如Write-Error
、 Write-Output
或任何其他Write-*
輸出到流(您可以重定向到 stdout-stream 並保存)。
參見http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/
為了補充Frode F. 的有用答案,它明智地建議修改腳本以使用Write-Error
進行錯誤報告:
如果修改代碼不是一個選項並且您正在使用PSv5+ ,您可以捕獲Write-Host
output ,因為因為 PSv5 Write-Host
寫入新引入的信息輸出流( Write-Information
主要用於寫入):
PowerShell 的輸出流是有編號的,信息流的編號是6
,因此輸出重定向表達式6>&1
將信息流重定向到編號為1
的成功輸出流,允許在變量中進行常規捕獲,如下例所示:
# PSv5+
$captured = Write-Host 'write-host output' 6>&1
$captured # output what was captured -> 'write-host output'
要了解有關 PowerShell 的輸出流和重定向的更多信息,請運行Get-Help about_Redirection
筆記:
通過6>&1
捕獲Write-Host
輸出由一個或多個System.Management.Automation.InformationRecord
實例組成,它們打印時就好像它們是字符串一樣,即通過它們的.MessageData.Message
屬性值,這是參數的字符串內容( s) 傳遞給Write-Host
。
因此,任何源於使用-ForegroundColor
和-BackgroundColor
參數的着色都不會(直接)通過:
但是,信息被保留,即在.MessageData.ForegroundColor
和.MessageData.BackgroundColor
屬性中,以及有關-NoNewLine
是否傳遞給Write-Host
的信息,在布爾屬性.MessageData.NoNewLine
這個答案展示了如何從捕獲的對象中重新創建原始顏色。
相比之下,保留了通過嵌入在原始字符串參數中的ANSI / VT 轉義序列進行着色。
注意:要捕獲輸出並將其傳遞(到成功輸出流),您有兩個選擇:
只需將語句括在(...)
中,但請注意,只有在所有輸出都已收集后才會顯示輸出。
($captured = Write-Host 'write-host output' 6>&1)
對於流式傳遞,請使用帶有-Variable
參數的Tee-Object
:
Write-Host 'write-host output' 6>&1 | Tee-Object -Variable captured
上述技術通常適用於捕獲和傳遞成功流輸出,無論是否涉及重定向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.