从CMD调用powershell.exe并退出代码布尔值

3
我想从cmd.exe中运行PowerShell命令(非脚本),并正确管理退出代码:
powershell.exe [bool]((get-service wsearch).status -eq 'Running')

但是我希望将布尔状态作为错误级别返回。

运行后,我想回显%errorlevel%并使用它来确定服务状态。

2个回答

3

只需使用PowerShell exit命令并提供结果作为参数即可。例如:

C:\>powershell -command "exit [int]$true;"

C:\>echo %errorlevel%
1

C:\>powershell -command "exit [int]$false;"

C:\>echo %errorlevel%
0

或者对于您的情况:
powershell.exe -command "exit [int]((get-service wsearch).status -eq 'Running')"

2
如果命令由于某些原因失败了怎么办?那么退出代码也是1,这并不意味着“命令已经运行并以代码1退出”。采用这种方法时,请考虑至少使用一些不同的代码退出。 - Roman Kuzmin
@RomanKuzmin 即使命令失败,它对我仍然有效。可能是因为 exit 得到的是布尔测试运算符的结果,而不是命令本身。 - zdan
也许在未终止错误的情况下(结果的正确性仍不清楚),但在终止错误的情况下,exit 不会被调用,而是 PowerShell 应该以 1 退出。 - Roman Kuzmin

0

你也可以使用这个变体:

CMD I> Set cmd=powershell -c "((gsv wsearch -ea 0).status -eq 'Running')"
CMD I> %cmd% |>nul find "True" && echo RUNNING||echo NOT RUNNING
RUNNING

CMD I> Set cmd=powershell -c "((gsv youka -ea 0).status -eq 'Running')"
CMD I> %cmd% |>nul find "True" && echo RUNNING||echo NOT RUNNING
NOT RUNNING

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