在PowerShell命令行上链接多个命令(类似于POSIX sh &&)。
在PowerShell命令行中,没有直接的类似于POSIX sh &&或||的功能。但有许多讨论提供了替代方案。以下是一个示例:
conditional execution (&& and ||) in powershell
当我发布这个答案时,我意识到说“这里已经有同样的问题解答了”是多么愚蠢。我已经投票关闭了这个问题。
这个页面还是有用的,当你搜索“chain commands powershell”时会跳转到这里。所以你可以通过链接找到真正的答案。
文章标题:PowerShell命令行中链式命令的问题及解决方法
PowerShell是一种常用的脚本编程语言和命令行 Shell。它提供了许多强大的功能和命令,但与POSIX sh不同,PowerShell没有直接的类似于POSIX sh &&或||的功能。这就引发了一个问题:如何在PowerShell命令行中实现链式命令的功能?
幸运的是,有许多讨论已经提供了替代方案。在Stack Overflow上有一个特别有用的讨论,可以在这个链接中找到:[conditional execution (&& and ||) in powershell](https://stackoverflow.com/questions/2251622)。这个讨论提供了一种解决方法,可以实现类似于POSIX sh中的条件执行功能。
然而,作为回答者之一,我意识到在发布这个答案时,我说“这里已经有同样的问题解答了”是多么愚蠢。因此,我已经投票关闭了这个问题。尽管如此,这个页面仍然有其存在的意义。当我们在搜索引擎中搜索“chain commands powershell”时,会跳转到这个页面。然后我们可以通过链接找到真正的答案。
总结起来,尽管PowerShell命令行没有直接的链式命令功能,但我们可以通过参考相关讨论和解决方案来实现类似的功能。有时候,即使在寻找答案的过程中遇到了一些困惑或冗余,我们仍然能够从中获得有价值的信息。
问题出现的原因是在PowerShell命令行中无法像POSIX sh &&那样链式运行命令。这意味着如果第一个命令失败,后续的命令仍然会被执行。
解决方法可以尝试以下方式:
$errorActionPreference='Stop'; cmd1; cmd2
这种方法可以确保即使第一个命令失败,后续的命令仍然会被执行。经过测试,第二个命令确实会被执行。
然而,这种方法只适用于原生的PowerShell cmdlets,对于其他类型的命令可能会出现问题。
某些情况下可以使用"$?"这个自动变量来判断命令是否成功执行,因此可以将cmd2写成如下形式:
if($?) { cmd2 }
这种方式可以在命令抛出异常时中断处理链。对于标准的cmdlets,通常可以添加"-ErrorAction Stop"来使其在失败时抛出异常,从而确保后续的命令不会被执行。
总之,尽管PowerShell命令行中无法直接实现像POSIX sh &&那样的命令链,但可以通过上述方法来模拟实现类似的功能。