PowerShell:如果不匹配字符串,则返回错误退出代码

25

我发现

$(Invoke-Expression hostname) -eq 'mycomputername'

无论是否匹配,退出代码都必须为0。这种行为与Linux不同,即如果不匹配,则错误代码退出1。

在PowerShell中是否有可以返回错误退出码的简短命令,如果不匹配字符串?

4个回答

29

在脚本中,您可以使用exit关键字更改退出代码。

正常终止将将退出码设置为0。

未捕获的THROW会将退出码设置为1。

EXIT语句将停止进程并将退出码设置为指定的值。

在您的情况下,我会这样做。

if ( $(hostname) -eq 'mycomputername')
{
  exit 0
}
else
{
  exit 1
}

在PowerShell v3.0上,未捕获的THROW没有为我设置退出代码为1。 - JamesQMurphy

1

小更新,现在你可以简化这个:

powershell -command "if($(Invoke-Expression hostname) -ne 'wrongname'){ exit 1 }"
echo Error=%ERRORLEVEL%

0
你是在寻找类似这样的东西吗?
C:\>powershell -command "& { if($(Invoke-Expression hostname) -eq 'wrongname'){ exit 0 } else { exit 1 }  } "
C:\>echo %errorlevel%
1

C:\>powershell -command "& { if($(Invoke-Expression hostname) -eq 'rightname'){ exit 0 } else { exit 1 }  } "
C:\>echo %errorlevel%
0

是的,你说得对。有没有更好的方法?看起来很笨重。 - TheOneTeam
@KitHo 可能是。您能否更详细地解释一下您想要实现什么?简化取决于预期的用例。 - vonPryz
我想要实现的是比较主机名,如果匹配字符串,则返回退出码0,否则返回退出码1。 - TheOneTeam
@KitHo 查找XY问题。 - vonPryz
你说的 XY 问题是什么意思? - TheOneTeam

0

如果你想更简洁地表达,

powershell -command "& { if($(Invoke-Expression hostname) -ne 'wrongname'){ exit 1 } }"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接