已经有一个问题解决了我的问题(我可以让 && 在 Powershell 中工作吗?),但有一点不同。我需要一个 输出 来自两个命令。看看,如果我只是跑:

(command1 -arg1 -arg2) -and (command2 -arg1)

我不会看到任何输出,但会看到 stderr 消息。并且,正如预期的那样,只需输入:

command1 -arg1 -arg2 -and command2 -arg1 

给出语法错误。

有帮助吗?

解决方案

<强> 2019 :所述Powershell的团队考虑增加用于&&支持的powershell - 在此GitHub的PR权衡

尝试这种情况:

$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)

$()是一个子表达式允许用户指定内包括一个管道多个语句。然后执行命令和管道Out-Host所以你可以看到它。下一条语句(子表达式的实际输出)应该输出$?即最后一个命令的成功结果。


$?工作正常,本机命令(控制台exe文件的),但它的cmdlet有待改进的东西。也就是说,$?似乎只能当小命令遇到终止错误返回$false。好像$?至少需要三种状态(失败,成功,部分成功)。所以,如果你使用的cmdlet,这工作得更好:

$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and 
$(command -arg1 -ev err | Out-Host;!$err)

这样的打击仍然。或许,这样的事情会更好:

function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
    foreach ($sb in $scriptblock)
    {
        $prevErr = $error[0]
        . $sb
        if ($error[0] -ne $prevErr) { break }
    }
}

ExecuteUntilError {command -arg1 -arg2},{command2-arg1}

其他提示

要简化多级脚本,其中 doThis ||出口1 的将是真正有用的,我用的是这样的:

function ProceedOrExit { 
    if ($?) { echo "Proceed.." } else { echo "Script FAILED! Exiting.."; exit 1 } 
}

doThis; ProceedOrExit
doNext

# or for long doos
doThis
ProceedOrExit
doNext
  • 巴什的/ cmd&&|| 控制运算符没有 PowerShell 等效项, ,并且由于您无法在 PowerShell 中定义自定义运算符,因此有 没有好的解决方法.

    • | Out-Host基于的解决方法 基思·希尔的回答 是一个严重的限制,因为它只能将正常的命令输出发送到 安慰 (终端),防止输出通过管道发送或被捕获到变量或文件中。

查找背景信息 这个答案 我的。

的最简单的解决方案是使用

powershell command1 && powershell command2

在一个cmd壳。当然,你不能在一个名为.ps1脚本中使用此,所以有这个限制。

长一点的方法是查看下面的

try {
  hostname
  if ($lastexitcode -eq 0) {
    ipconfig /all | findstr /i bios
  }
} catch {
  echo err
} finally {}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top