使用PowerShell按AD用户生日(extensionAttribute6)排序报错求助
解决AD用户按出生日期(月/日)+姓名排序的PowerShell错误问题
错误原因
你执行的命令中,Sort-Object无法直接通过extensionAttribute6.substring(4,5)这种方式调用属性方法作为排序键——PowerShell会将其视为无效的位置参数,因此抛出"找不到接受参数的位置参数"错误。
正确命令
要实现按月份、日期、姓名的顺序排序,需要使用脚本块({})来动态计算每个用户的排序键:
Get-ADUser -Filter 'enabled -eq "true"' -Properties extensionAttribute6 | # 先按出生日期的月日部分排序,再按姓名排序 Sort-Object { $_.extensionAttribute6.Substring(5) }, Name | Format-Table Name, extensionAttribute6 -AutoSize
补充说明
- 排序键计算:
$_.extensionAttribute6.Substring(5)会提取YYYY-MM-DD格式中从第5位开始的子串(即MM-DD部分),确保先按月份、再按日期排序。 - 过滤无效数据:如果存在未设置出生日期或格式不正确的用户,可以在过滤条件中添加格式校验,避免报错:
Get-ADUser -Filter 'enabled -eq "true" -and extensionAttribute6 -like "????-??-??"' -Properties extensionAttribute6 | Sort-Object { $_.extensionAttribute6.Substring(5) }, Name | Format-Table Name, extensionAttribute6 -AutoSize
- 优化输出:添加
-AutoSize参数可以让表格列宽自动适配内容,可读性更好。
预期输出
执行后会得到符合需求的排序结果:
Name extensionAttribute6 ---- ------------------- John Doe 1969-02-28 Albert Einstein 1897-03-14 Karl Meier 1973-12-01 James Bond 1975-12-22
内容的提问来源于stack exchange,提问作者Ralf Scholl
相关产品推荐
相关产品推荐

