如何在PowerShell中返回自定义Errorlevel?

问题描述 投票:-1回答:2

我想从命令行运行脚本,并获取错误级别。我使用这个批处理脚本。

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
powershell batch-file exit-code errorlevel
2个回答
2
投票

Exit更改为Return。退出将退出您的脚本。返回将返回您希望的值。


0
投票

问题出在批处理文件中。它应该是这样的:

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脚本已经是正确的。


0
投票

您可以在脚本中编写逻辑 所以任何退出点都会设置%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,...


0
投票

使用powershell -file运行脚本。默认值为powershell -command。一旦该脚本结束,使用-command会话仍在继续。

© www.soinside.com 2019 - 2024. All rights reserved.