我有一些用户在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")
}
}
这是怎么了?
答案 0 :(得分:6)
Try-Catch块将仅捕获终止错误。您可以通过设置特殊的ErrorPreference或ErrorAction变量来完成此操作。
此方法使几乎每个cmdlet都在发生错误时终止脚本执行。只要满足您的需求,您就可以这样做:
在脚本顶部声明
$ErrorActionPreference = 'Stop'
使用此方法,您可以控制在发生错误时不同的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
答案 1 :(得分:4)
向您要捕获的每个命令添加-ErrorAction Stop:
Try {
New-GPlink -name $line -target $SWITCH -ErrorAction Stop
}
Catch {
$_
}
或设置
$ErrorActionPreference = 'Stop'
在脚本的开头。