我有一个包装了外部命令(csrun.exe
)的自定义模块,并分析了输出,以便可以在PowerShell中使用它。
除了外部命令写入stderror
以外,几乎所有内容都可以正常工作,并且清除cmdlet中的错误似乎并不完全有效。它将清除(即$error.count
为0
和$lasterrorcode
为0
,但是一旦我返回调用我的cmdlet的脚本,就不再清除$error
和$lasterrorcode
,并且$error
中的错误引用了外部命令的基础异常
System.Management.Automation.RemoteException: The compute emulator is not running.
我已经尝试过,尝试捕捉,清除了提到的变量。无论如何,调用脚本都会保留对错误的引用。
CustomModule.psm1
$__azureEmulatorPath = "C:\Program Files\Microsoft SDKs\Azure\Emulator\"SDKs\Azure\Emulator\"
$__azureEmulator = __azureEmulatorPath + "csrun.exe"
function Get-EmulatorStatus() {
[OutputType([ComputeEmulatorStatus])]
[cmdletbinding()]
param()
$output = (& $__azureEmulator /status | Out-String)
if ($error.Count -gt 0 -or $LASTEXITCODE -ne 0) {
Write-Host ($Error | Format-List -Force | Out-String)
Write-Host Clearing Error and Continuing
$error.Clear()
$LASTEXITCODE = 0
}
#error from command cleared here
return $output
}
export-modulemember -function *
Test.ps1
import-module "CustomModule.psm1" # definew cmdlet Get-EmulatorStatus
$status = Get-EmulatorStatus
# even though error cleared in cmdlet, still here
Write-Host Write-Host Error $LASTEXITCODE, $Error.Count
Write-Host ($Error | Format-List -Force | Out-String)
最佳答案
尝试使用以下两个选项之一:
$ global:LASTEXITCODE
我遇到了这种调用robocopy,即使成功,它也会设置非零退出代码,并且干扰了Jenkin的自动化。
关于powershell - 如何清除由外部cmdlet或可执行文件设置的$ error和$ LASTEXITCODE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41306657/