如何在AD查询的PSCustomObject中获取CanonicalName长度并排序
问题解决:正确获取AD OU的CanonicalName字符串长度并排序
你的问题出在ForEach-Object脚本块中对CanonicalNamelen的赋值逻辑:
- 变量
$OUszero此时还未完成整个集合的赋值操作,引用它会导致错误结果 $OUszero.Canonicalname.Length获取的是整个OU集合的元素数量,而非单个CanonicalName字符串的长度
修正后的代码
$SourceOU = "OU=Computers,DC=domain,DC=my,DC=my" ##Load up OU's into variable $OUszero = Get-ADOrganizationalUnit -Properties CanonicalName, DistinguishedName, Description -Filter * -SearchBase $SourceOU | Sort-Object CanonicalName | ForEach-Object { [pscustomobject]@{ Name = Split-Path $_.CanonicalName -Leaf CanonicalName = $_.CanonicalName DistinguishedName = $_.DistinguishedName ComputerCount = @(Get-AdComputer -Filter * -SearchBase $_.DistinguishedName -SearchScope Subtree).Count # 关键修正:获取当前OU的CanonicalName字符串长度 CanonicalNamelen = $_.CanonicalName.Length } } | Where-Object ComputerCount -EQ 0 | # 按路径长度降序排序,确保深层OU优先处理 Sort-Object -Property CanonicalNamelen -Descending $OUszero | Format-Table
关键说明
- 单个字符串长度获取:使用
$_.CanonicalName.Length直接访问当前处理的OU对象的CanonicalName属性长度,这才是单个OU路径的字符长度值。 - 排序实现删除顺序:通过
Sort-Object -Property CanonicalNamelen -Descending将路径更长的深层OU排在结果集前面,后续执行删除操作时可以先删深层OU,避免父OU被提前删除后子OU无法定位的问题。
内容的提问来源于stack exchange,提问作者Iain Howard
相关产品推荐
相关产品推荐

