You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

关键说明

  1. 单个字符串长度获取:使用$_.CanonicalName.Length直接访问当前处理的OU对象的CanonicalName属性长度,这才是单个OU路径的字符长度值。
  2. 排序实现删除顺序:通过Sort-Object -Property CanonicalNamelen -Descending将路径更长的深层OU排在结果集前面,后续执行删除操作时可以先删深层OU,避免父OU被提前删除后子OU无法定位的问题。

内容的提问来源于stack exchange,提问作者Iain Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:42:28