powershell - try catch 是调用命令
问题描述
我有一个脚本块去 Dc 并尝试链接选定的 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 不起作用,如果他试图链接一个已经链接的gpo - ou,我试图做的是给用户信息。但是当我运行这个块时会发生什么是用户得到输出“......已成功链接”,即使链接已经存在。我将在命令行中看到错误输出,如下所示:
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
块对远程发生的事情是“盲目的”,并且只能捕获客户端上的错误,因此Invoke-Command
还必须将抛出错误视为终止,因此还要添加参数-ErrorAction
参数:
try{
Invoke-Command {...} -ErrorAction Stop
}
catch{
# ...
}
推荐阅读
- angular - Aws 放大登录、注册和确认签名工作流程问题
- amazon-web-services - Kinesis Firehose 可以进行过滤吗?
- javascript - 如何将一组数组(字符串格式)推送到数组中?
- oracle - 流水线函数在编译时给出“PLS-00630”错误
- python - 将 2 .CSV 与未知数量的列和名称进行比较
- r - 在时间序列中创建平稳性的问题
- lda - 如何获得两个模型的主题连贯性分数,然后将其用于比较?
- mysql - 如果 MySQL 数据库中不存在另一个对象,如何创建 SQL 查询来保存对象?
- nuxt.js - 在根路由 NuxtJS 中使用 get param
- php - 如何在php中添加.docx的下载链接