Powershell -使用Get-ADComputer的ErrorAction未隐藏错误
我刚开始接触广告的PowerShell,所以如果这个问题看起来很明显,我很抱歉 我正在尝试检查列表中提供的哪些设备是否在AD中。到目前为止,我使用的代码来自: 它工作得很好,但是“-ErrorAction SilentlyContinue”实际上并不抑制错误消息。我得到以下信息:Powershell -使用Get-ADComputer的ErrorAction未隐藏错误,powershell,Powershell,我刚开始接触广告的PowerShell,所以如果这个问题看起来很明显,我很抱歉 我正在尝试检查列表中提供的哪些设备是否在AD中。到目前为止,我使用的代码来自: 它工作得很好,但是“-ErrorAction SilentlyContinue”实际上并不抑制错误消息。我得到以下信息: Get-ADComputer:在下面找不到标识为“test”的对象: “DC=test,DC=dom”。 位于C:\Users\testaccount\Desktop\test.ps1:171 字符:19 +if(
Get-ADComputer:在下面找不到标识为“test”的对象:
“DC=test,DC=dom”。
位于C:\Users\testaccount\Desktop\test.ps1:171
字符:19
+if(@(获取ADComputer$target-ErrorAction SilentlyContinue).Count)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(测试:ADComputer)[获取ADComputer],ADIdentityNotFoundException
+FullyQualifiedErrorId:ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
我使用的代码如下:
foreach ($target in $devicelist)
{
if (@(Get-ADComputer $target -ErrorAction SilentlyContinue).Count)
{
$existingdevices += $target
}
else
{
#display error notification
}
}
我要寻找的是抑制错误消息,使其不再显示在控制台中,以便脚本在出现错误时真正以静默方式继续
任何和所有的帮助将不胜感激 那么让我们谈谈发生了什么 有两种类型的错误终止和非终止 终止将停止命令的执行并引发异常。非终止返回写入错误消息
-ErrorAction
处理非终止错误
Try{}Catch{}
负责终止错误
就你而言
foreach ($target in $devicelist)
{
try{
if (@(Get-ADComputer $target -ErrorAction SilentlyContinue).Count)
{
$existingdevices += $target
}
else
{
#display non-terminating error notification
}
}catch{
#display Terminating error notification
}
}
使用输出重定向:2>$Null
获取ADComputer-Server BlahBlah-Identity Computers,它不使用texist 2>$Null使用链接中显示的
try/catch
版本,并将-ErrorAction
设置为Stop
@Lee_Dailey谢谢!这确实有帮助,但我想知道为什么在if/else-erroraction
设置中不起作用?我不知道。[脸红]我没有访问AD cmdlet的权限。。。但他们因没有做到一个合适的高级cmdlet应该做的事情而臭名昭著此外,如果熟悉结构,try/catch
版本更标准、更可控、更容易理解。精彩的解释,现在我明白了。谢谢你的帮助!还值得注意的是,-ErrorAction Stop
基本上将非终止错误转换为终止错误,因此您可以使用try{}catch{}
捕获它们。