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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35