Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell -使用Get-ADComputer的ErrorAction未隐藏错误_Powershell - Fatal编程技术网

Powershell -使用Get-ADComputer的ErrorAction未隐藏错误

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(

我刚开始接触广告的PowerShell,所以如果这个问题看起来很明显,我很抱歉

我正在尝试检查列表中提供的哪些设备是否在AD中。到目前为止,我使用的代码来自:

它工作得很好,但是“-ErrorAction SilentlyContinue”实际上并不抑制错误消息。我得到以下信息:


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{}
捕获它们。