尝试捕捉实际上不会捕捉

Sha*_*iss 2 error-handling powershell

我有一些用户在 gui 脚本中选择的选定项目,那些代表 GPO 现在我有他想要链接到的 OU。代码有效,但我想为用户提供链接和无法链接的结果,因为它们已经链接但是由于某种原因,这个 try catch 不会这样做,gui 输出成功的链接并写入链接已经存在的控制台错误

$ResultsTextBox.clear()
 #$listBox1.selecteditems
 $SWITCH = Get-ADOrganizationalUnit -filter *  -Property CanonicalName | Where-Object {$_.CanonicalName -eq $listBox2.SelectedItem}

 forEach ($line in $listBox1.selecteditems){
 #Link each selected item GPO to the OU
 try {
    New-GPlink -name $line -target $SWITCH
    $ResultsTextBox.AppendText("`n GPO: $line HAVE BEEN LINKED Successfully.`n")
        }

    catch{$ResultsTextBox.AppendText("`n COULDN NOT LINK GPO: $line TO $SWITCH `n")
    }
 }
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

Vis*_*ish 6

Try-Catch 块只会捕获终止错误。您可以通过设置特殊的 ErrorPreference 或 ErrorAction 变量来做到这一点。

方法一:

此方法会导致几乎每个 cmdlet 在发生错误时终止脚本执行。如果它满足您的需要,您可以简单地执行此操作:

在脚本的顶部声明

$ErrorActionPreference = 'Stop'
Run Code Online (Sandbox Code Playgroud)

方法二:

使用它,您可以控制不同 PowerShell cmdlet 在错误期间的行为方式,从而为您提供更多控制:

# For every cmdlet inside the try block add -ErrorAction to Stop for the try block to "catch".
New-GPlink -name $line -target $SWITCH -ErrorAction STOP
Run Code Online (Sandbox Code Playgroud)

请检查about_try_catch_finally。