PowerShell查询AD用户:如何修改列标题?现有方案存格式问题
解决PowerShell AD查询修改列标题的问题
方案一:直接在Format-Table中指定列别名
你的第一种代码可以直接修改,在ft命令里通过哈希表定义列名和对应的属性,既能保留每行一条数据的正确格式,又能修改列标题:
Get-ADUser -Filter * -Properties Description,extensionAttribute14,PasswordLastSet,EmailAddress | Sort-Object Description,PasswordLastSet,SamAccountName | Where-Object {$_.SamAccountName -like "*abcd.*"} | ft -Autosize @{Name='描述'; Expression={$_.Description}}, @{Name='密码最后设置时间'; Expression={$_.PasswordLastSet}}, @{Name='账户名'; Expression={$_.SamAccountName}}, @{Name='姓名'; Expression={$_.Name}}, @{Name='联系电话'; Expression={$_.extensionAttribute14}}, @{Name='邮箱地址'; Expression={$_.EmailAddress}}
这种方式最直接,无需额外创建对象,一步完成筛选、排序和列名修改。
方案二:修复你第二种代码的问题
第二种代码的问题在于$UserDetails是用户对象集合,直接把$UserDetails.SamAccountName赋值给Username会将所有用户的账户名塞进一个数组,导致输出堆叠。你需要遍历每个用户对象,逐个创建输出对象:
$UserDetails = Get-ADUser -Filter * -Properties Description,extensionAttribute14,PasswordLastSet,EmailAddress | Where-Object {$_.SamAccountName -like "*abcd12.*"} $UserOutput = foreach ($user in $UserDetails) { New-Object psobject -Property @{ Username = $user.SamAccountName 联系电话 = $user.extensionAttribute14 描述 = $user.Description 密码最后设置时间 = $user.PasswordLastSet 姓名 = $user.Name 邮箱地址 = $user.EmailAddress } } $UserOutput | ft -Autosize Username,联系电话,描述,密码最后设置时间,姓名,邮箱地址
通过foreach循环遍历每个用户,就能保证每行输出一个用户的信息。
如果需要导出为可直接查看的报表,可以把最后一行的ft替换为Export-Csv -Path '.\AD用户报表.csv' -Encoding UTF8 -NoTypeInformation,方便客服团队打开使用。
内容的提问来源于stack exchange,提问作者BerkshireBugsy
相关产品推荐
相关产品推荐

