try catch 是 invoke-command
try catch is invoke-command
我有一个脚本块,它转到 Dc 并尝试 linking 一个选定的 gpo 和 ou:
forEach ($line in $listBox1.selecteditems) {
try {
Invoke-Command -Session $s -ScriptBlock {New-GPLink -Name $using:line -Target $using:SWITCH -ErrorAction Stop | Out-Null}
$ResultsTextBox.AppendText("`r $line HAVE BEEN LINKED Successfully.`r")
} catch {
$ResultsTextBox.AppendText("`n $line IS NOT LINKED TO THIS OU`n")
}
}
这里唯一的问题是 try catch 不会工作,我想做的是在用户尝试 link 已经 linked gpo - ou 时向他提供信息。
但是当我 运行 这个块是用户得到输出“...已经 linked 成功”时会发生什么,即使 link 已经存在。我会在命令行中看到如下错误输出:
The GPO named 'MSAVS-Policy1' is already linked to a Scope of Management with Path 'OU=Domain
Controllers,DC=shahar,DC=local'.
+ CategoryInfo : InvalidArgument: (Microsoft.Group...ewGPLinkCommand:NewGPLinkCommand) [New-GPLink], Argu
mentException
+ FullyQualifiedErrorId : UnableToCreateNewLink,Microsoft.GroupPolicy.Commands.NewGPLinkCommand
+ PSComputerName : dc01
我哪里做错了?
由于您正在远程执行 New-GPLink
cmdlet,我们需要考虑 2 个级别的错误处理 - 远程脚本块内的命令抛出的错误,然后是 [(重新)抛出的错误 Invoke-Command
.
try
块是 "blind" 远程发生的事情,只能捕获客户端上的错误,因此 Invoke-Command
也必须将抛出错误视为终止,因此也将参数 -ErrorAction
参数添加到其中:
try{
Invoke-Command {...} -ErrorAction Stop
}
catch{
# ...
}
我有一个脚本块,它转到 Dc 并尝试 linking 一个选定的 gpo 和 ou:
forEach ($line in $listBox1.selecteditems) {
try {
Invoke-Command -Session $s -ScriptBlock {New-GPLink -Name $using:line -Target $using:SWITCH -ErrorAction Stop | Out-Null}
$ResultsTextBox.AppendText("`r $line HAVE BEEN LINKED Successfully.`r")
} catch {
$ResultsTextBox.AppendText("`n $line IS NOT LINKED TO THIS OU`n")
}
}
这里唯一的问题是 try catch 不会工作,我想做的是在用户尝试 link 已经 linked gpo - ou 时向他提供信息。 但是当我 运行 这个块是用户得到输出“...已经 linked 成功”时会发生什么,即使 link 已经存在。我会在命令行中看到如下错误输出:
The GPO named 'MSAVS-Policy1' is already linked to a Scope of Management with Path 'OU=Domain
Controllers,DC=shahar,DC=local'.
+ CategoryInfo : InvalidArgument: (Microsoft.Group...ewGPLinkCommand:NewGPLinkCommand) [New-GPLink], Argu
mentException
+ FullyQualifiedErrorId : UnableToCreateNewLink,Microsoft.GroupPolicy.Commands.NewGPLinkCommand
+ PSComputerName : dc01
我哪里做错了?
由于您正在远程执行 New-GPLink
cmdlet,我们需要考虑 2 个级别的错误处理 - 远程脚本块内的命令抛出的错误,然后是 [(重新)抛出的错误 Invoke-Command
.
try
块是 "blind" 远程发生的事情,只能捕获客户端上的错误,因此 Invoke-Command
也必须将抛出错误视为终止,因此也将参数 -ErrorAction
参数添加到其中:
try{
Invoke-Command {...} -ErrorAction Stop
}
catch{
# ...
}