我应该如何处理 dism powershell 错误?

How should i handle dism powershell errors?

您好,我尝试使用 cath.. 处理来自 dism 的错误,但效果不佳。所以我的问题是,我该如何改进它。

function dotnet35 () {
    WriteLogNewScirpt "dotnet35"
    WriteLogInstruction "installing .Net 3.5 online"
    $Errorccured=$false
    $Error.Clear()
    try {
    $ErrorActionPreference = 'stop'
        Start-Process -FilePath powershell.exe -ArgumentList {DISM /Online /Enable-Feature /FeatureName:NetFx3 /All} -verb RunAs -WindowStyle Hidden | Out-Default
    } catch {
        WriteLogError ".Net 3.5 could not be installed"
        WriteLogError "$Error"
        $Errorccured=$true  
    }
    if(!$Errorccured) {
        WriteLogPosisitive ".Net 3.5 installed"       
    } else {
        dotnet35offline
    }
}

function dotnet35offline () {
    WriteLogInstruction "installing .Net 3.5 offline"
    $Erroroccured=$false
    $Error.Clear()
    try {
        $ErrorActionPreference = 'stop'
        Start-Process -FilePath powershell.exe -ArgumentList {DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:c:\scripts\sources\features\sxs} -verb RunAs | Out-Default
    } catch {
        WriteLogError ".Net 3.5 could not be installed"
        WriteLogError "$Error"
        $Erroroccured=$true
    }
    if(!$Erroroccured) {
        WriteLogPosisitive ".Net 3.5 konnte offline installiert werden"
    }
} 

对不起我的翻译,我翻译的很快^^

提前致谢

Terminating errors 仅影响 PowerShell 函数和 .NET 库中抛出的异常。如果要检查 外部命令(例如可执行文件)的结果,则需要检查 $LASTEXITCODE 变量, 其作用与批处理脚本中的 %ERRORLEVEL% 变量相同。例如:

Start-Process -FilePath dism.exe -ArgumentList '/Online', '/Enable-Feature', '/FeatureName:NetFx3', '/All' -Verb RunAs -WindowStyle Hidden
if( $LASTEXITCODE -ne 0 ){
  # Handle the error here
  # For example, throw your own error
  throw "dism.exe failed with exit code ${LASTEXITCODE}"
}

另外,不要在代码中调用 Out-Default