Powershell脚本输出到变量 - 捕获写主机输出

问题描述 投票:1回答:2

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

EG

$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的输出捕获到变量中,以便在基本脚本中使用此变量?

powershell io-redirection
2个回答
3
投票

你不能。该脚本使用Write-Host输出错误。 Write-Host只将文本写入控制台,它不返回任何对象,这意味着没有任何东西可以捕获。

我建议修改脚本以使用其他cmdlet,如Write-ErrorWrite-Output或任何其他输出到流的Write-*(您可以将其重定向到stdout-stream并保存)。

http://www.jsnover.com/blog/2013/12/07/write-host-considered-harmful/


0
投票

补充Frode F.'s helpful answer,明智地建议修改脚本以使用Write-Error进行错误报告:

如果修改代码不是一个选项并且您正在使用PSv5 +,则可以捕获Write-Host输出,因为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

© www.soinside.com 2019 - 2024. All rights reserved.