Powershell 脚本输出到变量 - 捕获 Write-Host 输出

Mis*_*Iks 4 powershell io-redirection

使用此脚本: https: //github.com/byterogues/powershell-bittrex-api ,我从另一个脚本调用它。

例如

$order = .\bittrex-api.ps1 -action buylimit -market BTC-TX -quantity 1 -rate 0.00011300
Run Code Online (Sandbox Code Playgroud)

bittrex-api.ps1 捕获错误并将其显示在屏幕上

BITTREX 错误:API 查询返回错误。错误消息:MIN_TRADE_REQUIREMENT_NOT_MET

如何将 bittrex-api.ps1 的输出捕获到变量中,以便我可以在基本脚本中使用该变量?

mkl*_*nt0 6

为了补充Frode F. 的有用答案Write-Error,该答案明智地建议修改用于错误报告的脚本:

如果无法修改代码并且您正在使用PSv5+可以捕获Write-Host输出,因为由于 PSv5Write-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'
Run Code Online (Sandbox Code Playgroud)

要了解有关 PowerShell 输出流和重定向的更多信息,请运行Get-Help about_Redirection

笔记:

  • Write-Hostvia 捕获的输出6>&1由一个或多个实例组成System.Management.Automation.InformationRecord,这些实例就像字符串一样打印.MessageData.Message,即通过它们的属性值,即传递给 的参数的字符串内容Write-Host

  • 因此,任何源自使用和参数的着色都不会(直接)传递:-ForegroundColor-BackgroundColor

    • 但是,该信息被保留,即在.MessageData.ForegroundColor和属性中,以及有关是否传递给, 在布尔属性中的.MessageData.BackgroundColor信息-NoNewLineWrite-Host.MessageData.NoNewLine

    • 这个答案展示了如何从捕获的对象重新创建原始颜色。

  • 相比之下,通过嵌入原始字符串参数中的ANSI / VT 转义序列进行的着色被保留。


注意:要捕获输出并将其传递(到成功输出流),您有两种选择:

上述技术通常适用于捕获并传递成功流输出,无论是否涉及重定向。