Windows 验证函数的参数不适用于OU和CN

Windows 验证函数的参数不适用于OU和CN,windows,validation,powershell,active-directory,Windows,Validation,Powershell,Active Directory,我试图用下面的代码片段验证我的OU函数 Param( [parameter(Mandatory=$True,Position=1)] [ValidateScript({Get-ADOrganizationalUnit -Identity $_ -Server $Domain})] [String]$SourceOu ) 这适用于正常的OU,如下所示 "OU=Desktops,OU=Germany,DC=dom,DC=de") 但是我还需要处理像这样的内置广告容器

我试图用下面的代码片段验证我的OU函数

Param(
    [parameter(Mandatory=$True,Position=1)]
    [ValidateScript({Get-ADOrganizationalUnit -Identity $_ -Server $Domain})] 
    [String]$SourceOu
 )
这适用于正常的OU,如下所示

"OU=Desktops,OU=Germany,DC=dom,DC=de")
但是我还需要处理像这样的内置广告容器

"CN=Computers,DC=dom,DC=de",
不幸的是,它们失败了(可能是因为它们的
DiscrimitedName
以CN开头,而不像其他OU那样以OU开头),错误如下:

删除OldAdaAccount:无法验证参数“SourceOu”上的参数。在“DC=dom,DC=de”下找不到标识为“CN=Computers,DC=dom,DC=de”的对象


有没有办法解决这个问题,或者我可以不使用一个cmdlet同时检查这两种类型(

可能只是检查对象是否为容器

Param(
    [parameter(Mandatory=$True,Position=1)]
    [ValidateScript({"container","organizationalUnit" -contains (Get-ADObject -Identity $_ -Server $Domain).ObjectClass})] 
    [String]$SourceOu
 )

编辑:啊。它应该是容器或组织单元。已更新。

可能只是检查对象是否为容器

Param(
    [parameter(Mandatory=$True,Position=1)]
    [ValidateScript({"container","organizationalUnit" -contains (Get-ADObject -Identity $_ -Server $Domain).ObjectClass})] 
    [String]$SourceOu
 )

编辑:啊。它应该是容器或organizationalUnit.Update。

它可以工作,但老实说,我不明白为什么…你能给我解释一下使用的语法吗?:/I不理解这个构造:(考虑到我的druthers,我会构造它:对不起,没有及时完成编辑。第一部分是数组。“-contains”如果后面的元素出现在它前面的数组中,则运算符的计算结果为true。最后一部分查找ad对象并仅返回ObjectClass属性。在PS 3+中,您可以切换它们并使用“-in”运算符,这更自然:(get-adobject$)。ObjectClass-在“organizationalUnit”、“container”中啊,好的,thx。我认为数组必须总是在{}中,就像在
$array=@{“OrganizationalUnit”,“container}
中一样。这就是为什么我感到困惑的原因。它是有效的,但老实说,我不明白为什么…你能向我解释一下使用的语法吗?:/I不理解这个结构:(考虑到我的druthers,我会构造它:抱歉。没有及时完成编辑。第一部分是数组。如果紧随其后的元素出现在它前面的数组中,“-contains”操作符将计算为true。最后一部分查找ad对象,只返回ObjectClass属性。在PS 3+中,您可以切换它们并使用“-in”运算符,这更自然:(get-adobject$).ObjectClass-在“organizationalUnit”,“container”中,啊,好的,thx。我认为数组必须总是在{}中,就像在
$array=@{“organizationalUnit”,“container}
中一样。这就是我感到困惑的原因。