PowerShell中Sort-Object结合Get-Unique仅返回1条结果的问题
问题原因及解决方法
核心问题
你的代码仅返回1条结果,是因为**Sort-Object -Property DistinguishedName的用法错误**,导致排序逻辑失效,最终Get-Unique误判所有值为重复项。
具体分析
- 执行
$paths = $users.DistinguishedName后,$paths是一个字符串数组(每个元素是用户的DistinguishedName字符串)。 - 对字符串数组使用
Sort-Object -Property DistinguishedName时,PowerShell会尝试查找每个字符串对象的DistinguishedName属性——但字符串本身没有这个属性,所有元素的排序键都会被判定为$null,排序后所有字符串被视为“同一优先级”的元素。 Get-Unique依赖已正确排序的输入识别重复项,当输入被错误排序(所有元素归为同一组),它只会保留第一个元素,因此最终仅返回1条结果。
修复后的代码
$users = Get-ADUser -Filter * $paths = $users.DistinguishedName # 直接对字符串数组排序,无需指定Property参数 $unique_paths = $paths | Sort-Object | Get-Unique
额外优化方案
如果目标是直接获取唯一的用户DistinguishedName,可简化代码:
- 方式一:用
Select-Object -Unique(无需提前排序,逻辑更简洁)$unique_paths = (Get-ADUser -Filter *).DistinguishedName | Select-Object -Unique - 方式二:简化链式调用
$unique_paths = (Get-ADUser -Filter *).DistinguishedName | Sort-Object | Get-Unique
内容的提问来源于stack exchange,提问作者cosmo_
相关产品推荐
相关产品推荐

