如何用PowerShell移除AD导出字段中的CRLF字符?
解决AD导出CSV中的CRLF字符与编码问题
移除/替换地址字段的CRLF字符
你可以直接在Select-Object的计算属性里处理streetaddress字段,用正则表达式替换掉所有回车换行符。比如把换行换成单个空格(保留地址可读性),或者直接移除:
修改后的完整命令如下:
Get-ADUser -Filter {Enabled -eq $True} -Properties cn, streetaddress, telephoneNumber ` | Select-Object @{N='AcctName';E='cn'}, @{N='Address';E={$_.streetaddress -replace '[\r\n]+', ' '}}, @{N='Phone';E='telephoneNumber'} ` | Export-Csv c:\temp\test.csv -NoType
[\r\n]+匹配任意连续的回车(CR)或换行(LF)字符- 第二个参数
' '表示替换为单个空格,若要完全移除换行,改成''即可
处理CSV文件编码问题
PowerShell的Export-Csv默认编码因版本而异:
- PowerShell 5.1 默认使用ASCII编码,非ASCII字符会丢失或乱码
- PowerShell 7+ 默认使用UTF-8无BOM编码
SQL Server导入时,推荐根据数据情况指定编码:
- 如果数据全是英文,用
-Encoding ASCII即可 - 如果包含非英文字符,推荐用
-Encoding UTF8(PowerShell 5.1中UTF8带BOM,7+中默认无BOM;若需要带BOM,7+可用-Encoding UTF8BOM)
添加编码参数后的命令示例(以UTF-8为例):
Get-ADUser -Filter {Enabled -eq $True} -Properties cn, streetaddress, telephoneNumber ` | Select-Object @{N='AcctName';E='cn'}, @{N='Address';E={$_.streetaddress -replace '[\r\n]+', ' '}}, @{N='Phone';E='telephoneNumber'} ` | Export-Csv c:\temp\test.csv -NoType -Encoding UTF8
内容的提问来源于stack exchange,提问作者Jeff Vanderdoes
相关产品推荐
相关产品推荐

