Get-ADOrganizationalUnit单OU结果Count值空白问题求助
这个AD OU统计的坑我踩过!原因和解决办法看这里
为什么单个OU时.Count不是整数1?
其实问题出在PowerShell处理结果的逻辑,加上AD对象自带的属性搞混了:
- 当
Get-ADOrganizationalUnit返回多个OU时,PowerShell会自动把结果打包成一个数组,这时候你调用.Count,拿到的是数组的元素数量,完全正常。 - 但返回单个OU时,结果并不是数组,而是一个
Microsoft.ActiveDirectory.Management.ADOrganizationalUnit的实例。而这个AD对象本身就带了一个名为Count的属性(你提供的sanity检查里能看到Count : {}——这是个空的集合类型)。所以你此时调用的.Count,是对象自带的属性,不是你想要的“结果数量”。
这就解释了:
- 你输出
$OUCountOneLevel.Count时看不到数值(因为是空集合) - 执行
5 + $OUCountOneLevel.Count会报错:你试图把整数和一个集合对象做加法,PowerShell当然不认!
靠谱的解决方法
有两种简单直接的方式,不管返回0、1还是多个OU,都能正确拿到数量:
1. 强制把结果转成数组
用@()运算符包裹命令结果,这样哪怕只有一个OU,也会被包装成数组,此时.Count就是正确的数量:
$OUCountOneLevel = @(Get-ADOrganizationalUnit -Filter * -SearchScope OneLevel -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there') $OUCountOneLevel.Count # 现在会正确返回1(如果只有一个子OU)
2. 用Measure-Object统计
把结果通过管道传给Measure-Object,它会返回一个包含Count属性的统计对象,直接取这个值就行:
$ouStats = Get-ADOrganizationalUnit -Filter * -SearchScope OneLevel -SearchBase 'OU=MyParentOU,DC=USA,DC=hello,DC=there' | Measure-Object $ouStats.Count # 精准返回OU的数量
这两种方法都能完美解决你遇到的问题,我平时处理AD查询时基本都用第一种,简单高效。
内容的提问来源于stack exchange,提问作者Local Needs
相关产品推荐
相关产品推荐

