PowerShell数组排序后使用Sort -Unique无法去除重复值问题
PowerShell Sort -Unique 去重失效解决方案
问题根因
你遇到的排序后仍有重复项的问题,核心是两种场景导致:
- 获取到的姓名字符串前后存在空格、制表符等不可见字符,肉眼识别内容一致但实际字符序列不同,
Sort -Unique会判定为不同值 $fullnames变量未在循环前显式初始化,之前运行脚本残留的历史值和本次查询结果混合,或者变量类型异常导致去重逻辑失效
修复步骤
1. 常规修复方案
完整可运行的修正后代码如下:
# 显式初始化空数组,避免历史值残留 $fullnames = @() foreach ($pute in $puters){ $user = get-loggedinuser -computer $pute.name | select -expandproperty username # 获取AD用户名后主动去除首尾空白字符 $fullname = (get-aduser $user | select -expandproperty name).Trim() $fullnames += $fullname } # 二次清理空白后再排序去重 $fullnames = $fullnames | ForEach-Object { $_.Trim() } | Sort-Object -Unique
2. 极端场景兼容
如果仍存在重复,说明姓名中包含其他不可见特殊字符,可以在Trim的基础上额外添加字符过滤逻辑:
# 过滤非中英文、空格的特殊字符后再去重 $fullname = [regex]::Replace((get-aduser $user | select -expandproperty name), "[^\u4e00-\u9fa5a-zA-Z\s]", "").Trim()
内容的提问来源于stack exchange,提问作者SpaceCoyote300
相关产品推荐
相关产品推荐

