syntax - powershell中的条件执行(&&和||)

标签 syntax powershell command-execution

已经有问题解决了我的问题( Can I get && to work in Powershell? ),但有一个区别。我需要一个 输出 从两个命令。看,如果我只是运行:

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

我不会看到任何输出,但会看到 stderr 消息。而且,正如预期的那样,只需键入:
command1 -arg1 -arg2 -and command2 -arg1 

给出语法错误。

最佳答案

2019 :Powershell 团队是 considering adding support for && to Powershell - weigh in at this GitHub PR

尝试这个:

$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)
$()是一个子表达式,允许您在包含管道中指定多个语句。然后执行命令和管道到Out-Host所以你可以看到它。下一条语句(子表达式的实际输出)应该输出 $?即最后一个命令的成功结果。
$?适用于 native 命令(控制台 exe 的),但对于 cmdlet,它留下了一些不足之处。即,$?似乎只有返回 $false当 cmdlet 遇到终止错误时。好像$?至少需要三个状态(失败、成功和部分成功)。因此,如果您使用的是 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}

关于syntax - powershell中的条件执行(&&和||),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251622/

相关文章:

c++ - 为运算符定义别名

oracle - PLS-00382 : expression is of wrong type Trigger

sql - 当 JOIN 列在两个表中具有相同名称时,T-SQL 语法缩写?

windows - 如何让 PowerShell 保持命令窗口打开?

java - 如何获取环境变量的格式化值

javascript - 如何将集合转换为数组?

winforms - 在winform中创建保存按钮

json - 在Powershell中过滤JSON

java - java Runtime.exec(String[]) 平台独立吗?