首页 > 解决方案 > 存储有错误的命令输出

问题描述

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

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

  1. 成功 - 命令输出:

    切换到分支'X'

  2. 失败 - 命令输出

    您对以下文件的本地更改将被 checkout <list files> 覆盖:请在切换分支之前提交您的更改或存储它们。中止

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

这是我尝试过的。

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

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

在此处输入图像描述

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

在此处输入图像描述

标签: powershell

解决方案


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

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

如果没有[string[]]强制转换,stderr 输出行将$output作为[System.Management.Automation.ErrorRecord]实例存储,并且稍后输出这些实例会有些误导性地打印它们,就好像它们是 PowerShell 错误一样。

(请注意,PowerShell Core不再表现出这种行为:虽然 stderr 行仍被捕获[System.Management.Automation.ErrorRecord]实例,但它们现在打印为常规字符串。)


推荐阅读