PowerShell中等同于cmd的"IF %ERRORLEVEL% NEQ 0"的代码是什么?

3

寻找PowerShell中相当于此命令的错误检查:

IF %ERRORLEVEL% NEQ 0

这是我正在尝试编写的PowerShell代码:

Write-Information "Installing .NET 3 from DVD:"
$NetFX3_Source = "D:\Sources\SxS"
dism /online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:$NetFX3_Source /NoRestart
IF (****TheCommandYouTellMe****) {
Write-Information "DVD not found, installing from online sources, the Win default method"
DISM.EXE /Online /Add-Capability /CapabilityName:NetFx3~~~~
Add-WindowsCapability –Online -Name NetFx3~~~~
}

2
可能是 Powershell 中的 `$?` 是什么? 的重复问题。 - briantist
4
命令,$LASTEXITCODE 用于外部命令。 - Mathias R. Jessen
我正在寻找如何检查是否存在任何错误,以及在出现错误时要执行的操作。我感谢您告诉我要检查哪个变量,但是我应该如何检查它呢? - gregg
很好的区分 @MathiasR.Jessen,撤回关闭投票。 - briantist
2个回答

6

因为dism.exe是外部程序,所以您需要检查$LASTEXITCODE自动变量:

dism /online /andsoon
if($LASTEXITCODE -ne 0)
{
    # Add your capability
}

2

Mathias R. Jessen的回答实际上回答了具体问题,但并没有回答PowerShell中cmd“IF %ERRORLEVEL% NEQ 0”的等效命令的全部内容(对我来说它没有完成工作,因为我想检查是一个内部程序的dir错误,而$LASTEXITCODE仅适用于外部程序,据我所知),更通用的测试应该是:

dism ...
if ($? -ne $true) {
    # Add your capability
}

或者:

dism ...
if ($? -eq $false) {
    # Add your capability
}

但是虽然它更加通用,但它不够灵活,因为我假设设置$LASTEXITCODE的程序可能会根据执行过程中发生的情况返回不同的代码,然后根据情况做出不同的反应,而使用$?我们只有成功($true)或失败($false),例如:

if ($LASTEXITCODE -eq 0)
{
    echo Success
}
elseif ($LASTEXITCODE -eq 1)
{
    # Treat whatever last exit code = 1 means
}
elseif ($LASTEXITCODE -eq 2)
{
    # Treat whatever last exit code = 2 means
}
...

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