如何在 PowerShell 中返回自定义错误级别?
Posted
技术标签:
【中文标题】如何在 PowerShell 中返回自定义错误级别?【英文标题】:How to return custom Errorlevel in PowerShell? 【发布时间】:2019-03-12 05:15:57 【问题描述】:我想从命令行运行脚本,并获取错误级别。 我使用这个批处理脚本。
set log=C:\Users\PowerShell\XML\Log.txt
set PS=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
set PS=%PS%\powershell.exe
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" C:\Users\XML.ps1 -i C:\Users\A2.txt -j C:\Users\Fb.xml
echo %ERRORLEVEL% > "%log%"
我试过这个脚本来获取自定义的errorlevel,如果找到,它将返回123
,否则返回456
。但它总是给我1
。
$regex = [regex]$Pattern
$matching = $regex.Match($FBString)
if ($matching.Success)
while ($matching.Success)
"Match found: 0" -f $matching.Value
Exit 123
$matching = $matching.NextMatch()
else
"Not Found"
Exit 456
【问题讨论】:
【参考方案1】:将 Exit
更改为 Return
。 Exit 将退出您的脚本。 Return 将返回您想要的值。
【讨论】:
当我从 powershell 运行它时它可以工作。但我想通过使用批处理文件来获取错误级别值 0 表示脚本运行成功,1 表示有错误。如果您想批量捕获相同的内容,则已将它们重定向到标准输出 ( exitexit \b 123
is best practice for exit-codes since windows 2000/xp(几乎在这个链接的按钮上)。【参考方案2】:
您可以在脚本中编写逻辑
所以任何退出点都会设置%errorlevel%
系统变量...
并创建您的“错误返回逻辑”...
类似这样的东西:
if ( $LASTEXITCODE -eq 0 ) exit 0
if ( $LASTEXITCODE -eq 1 ) exit 1
if ( $x -gt 1 ) exit 2
if ( $x -lt 1 ) exit 3
...
然后您可以从批处理文件中检查%errorlevel% == 0
、1
、2
、...
【讨论】:
【参考方案3】:使用 powershell -file 运行脚本。默认为 powershell -command。一旦该脚本结束,使用 -command 会话仍在继续。
【讨论】:
非常感谢!这节省了我的时间......并且应该是公认的答案(无需重写脚本,所需的退出代码直接放入 %errorlevel%)。【参考方案4】:问题出在批处理文件中。应该是这样的:
set log=C:\Users\PowerShell\XML\Log.txt
set PS=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
set PS=%PS%\powershell.exe -ExecutionPolicy Bypass -File
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File C:\Users\XML.ps1 -i C:\Users\A2.txt -j C:\Users\Fb.xml
echo %ERRORLEVEL% > "%log%"
对于第一个 PowerShell 脚本已经正确。
【讨论】:
以上是关于如何在 PowerShell 中返回自定义错误级别?的主要内容,如果未能解决你的问题,请参考以下文章
我在 ActiveDirectory 中创建了一个新的自定义属性。如何在 PowerShell 中修改它?
在 Azure PowerShell 中显示自定义错误消息并退出