如何在PowerShell中导出无引号且包含空白列的Get-ADUser结果至CSV文件
如何在PowerShell中导出无引号且包含空白列的Get-ADUser结果至CSV文件
嘿,我完全懂你的困扰——旧版PowerShell的Export-CSV确实死脑筋,非要加引号,而且工具还挑格式,不能事后改文件对吧?别着急,咱们直接从源头解决这两个问题:
一、搞定「去掉所有引号」的问题
因为你用的是PowerShell 7以下的版本,没有-UseQuotes参数,Export-CSV会强制给字段加引号(尤其是空值或带特殊字符的字段)。这时候咱们干脆不用Export-CSV,手动构建CSV内容,完全掌控格式:
二、同时添加「空白列」
要加空白列很简单,在自定义属性里直接定义一个返回空字符串的字段就行,后续拼接的时候自然会输出空的列。
完整的脚本示例
# 1. 定义要输出的字段(包含空白列) $outputProperties = @( @{Name="FirstName"; Expression={$_.GivenName}}, @{Name="LastName"; Expression={$_.SurName}}, @{Name="UserID"; Expression={$_.EmployeeId}}, @{Name="Blank"; Expression={""}} # 这里就是我们要的空白列 ) # 2. 获取启用的AD用户,只加载需要的属性(别用-Properties *,太浪费性能) $adUsers = Get-ADUser -Filter {Enabled -eq $true} -Properties GivenName, SurName, EmployeeId | Select-Object $outputProperties # 3. 构建CSV表头 $csvHeader = $adUsers[0].PSObject.Properties.Name -join ',' # 4. 构建每一行的内容(直接用逗号分隔,无引号) $csvRows = $adUsers | ForEach-Object { # 把每个属性的值按顺序拼接成逗号分隔的字符串 $_.PSObject.Properties.Value -join ',' } # 5. 把表头和行合并,输出到CSV文件 @($csvHeader) + $csvRows | Out-File -FilePath "Data.csv" -Encoding UTF8 -NoNewline
几点小提示
- 我特意把
-Properties *改成了只加载需要的GivenName, SurName, EmployeeId,这样能让脚本跑快很多,避免加载一堆没用的AD属性。 - 如果你的用户数据里有逗号,这种无引号的格式会破坏CSV结构(因为工具没法区分字段分隔符和内容里的逗号)。如果遇到这种情况,你可以提前把内容里的逗号替换成其他字符,比如:
$_.GivenName -replace ',', ';'。 - 要是AD里没有用户数据,脚本会报错,你可以加个判断:
if ($adUsers) { ... } else { Write-Host "No enabled users found" }
这样输出的CSV文件就完全没有引号,而且包含你要的空白列,完全符合工具的要求,不用事后修改文件~
备注:内容来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

