存储命令输出错误

时间:2018-06-28 01:46:06

标签: powershell

我想存储此命令的输出 git checkout master

此命令的输出有两种状态。

  1. 成功-命令输出:

      

    切换到分支“ X”

  2. 失败-命令输出

      

    您对以下文件的本地更改将被结帐<列表文件>覆盖:请提交更改或存储它们,然后再切换分支。中止

我想存储输出,并通过检查字符串中止来检查输出是否成功。

这是我尝试过的。

$output = git checkout master 2>&1
if ($output.Contains("Aborting")) {
    Write-Host $output -BackgroundColor Red
} else {
    Write-Host $output
}

但是在第二种状态下,$output会产生类似的结果:

enter image description here

该命令似乎已完成,但是语法错误。我该如何解决?我想输出

enter image description here

1 个答案:

答案 0 :(得分:3)

确保将命令的stderr输出转换为常规字符串:

$output = [string[]] (git checkout master 2>&1)

在没有[string[]]强制转换的情况下,stderr输出行将作为$output实例存储在[System.Management.Automation.ErrorRecord]中,稍后输出此类实例会误导其输出,就好像它们是PowerShell错误一样。

(请注意,PowerShell Core 不再表现出此行为:尽管stderr行仍作为[System.Management.Automation.ErrorRecord]实例被捕获,但现在它们 print 作为常规字符串。)