如何在PowerShell的AD用户查询记录中添加对应AD服务器名称
修改后的PowerShell脚本及说明
核心修改点
- 将分散的服务器名整理成数组,简化重复代码
- 在每条用户记录中添加
ServerName字段,明确用户所属AD服务器 - 可选:合并所有查询结果后一次性导出,提升效率
修改后的完整脚本
$paramlist = @("EmailAddress", "distinguishedname", "name", "GivenName", "surname", "SamAccountName", "Userprincipalname", "Department", "title", "manager", "displayName", "company", "mail") $outputfile = "C:\AD_Listing_$(get-date -f yyyy-MM-dd).csv" # 把所有AD服务器名放到数组里,方便循环处理 $adServers = @("Canada.bz", "Europe.bz", "US.bz", "UK.bz", "Asia.bz") # 初始化空数组存储所有用户数据 $allUserRecords = @() foreach ($server in $adServers) { # 查询当前服务器的AD用户,并添加ServerName字段 $userRecords = Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} # 合并当前服务器的用户数据到总集合 $allUserRecords += $userRecords } # 一次性导出所有数据到CSV $allUserRecords | Export-Csv -Path $outputfile -NoTypeInformation
关键代码解释
@{Name='ServerName'; Expression={$server}}:这是PowerShell自定义计算属性的写法,Name指定新增列的名称,Expression定义该列的取值逻辑(这里直接取当前循环的服务器名)- 用数组
$adServers统一管理服务器列表,配合foreach循环避免重复代码,后续新增/删除服务器只需修改数组即可 - 先收集所有数据再一次性导出,比多次使用
-Append更高效,也能避免CSV格式可能出现的异常
兼容原逻辑的替代写法(保留分次Append)
如果习惯原脚本分次导出的方式,可按以下修改:
$paramlist = @("EmailAddress", "distinguishedname", "name", "GivenName", "surname", "SamAccountName", "Userprincipalname", "Department", "title", "manager", "displayName", "company", "mail") $outputfile = "C:\AD_Listing_$(get-date -f yyyy-MM-dd).csv" # 删除已存在的输出文件,避免残留旧数据 if (Test-Path $outputfile) { Remove-Item $outputfile } $Server = "Canada.bz" Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} | Export-Csv -Path $outputfile -NoTypeInformation $Server = "Europe.bz" Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} | Export-Csv -Append -Path $outputfile $Server = "US.bz" Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} | Export-Csv -Append -Path $outputfile $Server = "UK.bz" Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} | Export-Csv -Append -Path $outputfile $Server = "Asia.bz" Get-ADUser -Server $server -Filter * -Properties $paramlist | Select-Object $paramlist, @{Name='ServerName'; Expression={$server}} | Export-Csv -Append -Path $outputfile
注意:建议添加-NoTypeInformation参数,避免CSV文件开头出现#TYPE Selected.Microsoft.ActiveDirectory.Management.ADUser这类无用信息。
内容的提问来源于stack exchange,提问作者Erik in Wpg
相关产品推荐
相关产品推荐

