如何从Powershell获取退出代码并返回CMD?

Che*_*ies 5 powershell cmd batch-file

我有一个 powershell 脚本。我使用 CMD 文件运行 powershell 脚本。我想从 powershell 脚本中获取退出代码并将值返回给 CMD。我试过这个。但当我执行 CMD 文件来调用 powershell 时,它不会返回退出代码。

PowerShell脚本

$SN = "17A1"
$BID = "#SBCM#DBCM"
$FB = "UdpdqfP.Bd"

$SN2 = Get-Content .\out4 | Where-Object{$_.Contains("$SN")}

if($SN2)
{
    Write-Host "OK"
}
else{
    Write-Host "Not ok"
   $ExitCode = "ExitCode"
   $ExitCode = "123"
   Exit $ExitCode
}
Run Code Online (Sandbox Code Playgroud)

CMD 调用 powershell 并返回退出代码

powershell.exe -ExecutionPolicy Bypass -File %~dp0\test.ps1
ECHO %ExitCode%
Exit /b %ExitCode%
Run Code Online (Sandbox Code Playgroud)

我执行 CMD 文件并返回:

D:\XX\>powershell.exe -ExecutionPolicy Bypass -File D:\XX\\test.ps1
Not ok

D:\XX\>ECHO
ECHO is on.

D:\XX\>Exit /b
Run Code Online (Sandbox Code Playgroud)

执行 CMD 文件后我的期望:

D:\Boot_Order>powershell.exe -ExecutionPolicy Bypass -File D:\Boot_Order\\test.ps1
Not ok

D:\Boot_Order>ECHO
123

D:\Boot_Order>Exit /b 123
Run Code Online (Sandbox Code Playgroud)

Ger*_*ard 1

批处理文件与环境变量一起使用%errorlevel%,因此将批处理文件更改为:

powershell.exe -ExecutionPolicy Bypass -File "%~dp0\test.ps1"
echo %errorlevel%
exit /b %errorlevel%
Run Code Online (Sandbox Code Playgroud)