【发布时间】:2018-05-23 20:13:00
【问题描述】:
仅查找嵌套在其他 OU 中的 OU 计数。我正在使用“OneLevel”范围,它应该给我直接在父级下的任何 OU 对象,而不是父级本身。
示例(拉取整个子树,包括父级):
PS C:\> $OUCountSubtree = Get-ADOrganizationalUnit -Filter * -SearchScope Subtree -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there'
PS C:\> $OUCountSubtree.Name
PS C:\> MySubOU
PS C:\> MyParentOU
PS C:\> $OUCountSubtree.Count
PS C:\> 2
所以效果很好。但是,当我尝试返回已发现对象的计数,或者尝试对结果数字进行任何整数运算时,如果计数为 1,则会出错。当计数为 0 或 2+ 时,它会起作用。此外,当我显示完整结果(而不仅仅是计数)时,一切看起来都很好。
示例(仅拉取子 OU):
PS C:\> $OUCountOneLevel = Get-ADOrganizationalUnit -Filter * -SearchScope OneLevel -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there'
PS C:\> $OUCountOneLevel.Name
PS C:\> MySubOU
PS C:\> $OUCountOneLevel.Count
PS C:\>
完整性检查
PS C:\> $OUCountOneLevel
City :
Count : {}
Country :
DistinguishedName : OU=MySubOU,OU=MyParentOU,DC=USA,DC=hello,DC=there
LinkedGroupPolicyObjects : {}
ManagedBy :
Name : MySubOU
ObjectClass : organizationalUnit
ObjectGUID : [some guid]
PostalCode :
State :
StreetAddress :
所以返回了一个 OU。然而……
PS C:\> $OUCountOneLevel.Count -eq 0
PS C:\> False
PS C:\> $OUCountOneLevel.Count -eq $null
PS C:\> False
PS C:\> $OUCountOneLevel.Count -eq ''
PS C:\> False
PS C:\> 5 + $OUCountOneLevel.Count
PS C:\> Method invocation failed because [Microsoft.ActiveDirectory.Management.ADPropertyValueCollection] does not contain a method named 'op_Addition'.
我多年来一直在做这种事情,我不记得以前见过这种行为。为什么这不会返回整数 1?除了对 AD 的简单查询之外,我还没有声明数组或任何其他内容。
【问题讨论】:
-
尝试强制数组:
@(Get-...)
标签: powershell active-directory powershell-module