PowerShell脚本中如何提取非拉丁名用户并解决乱码问题?
解决Pacli.exe导出含非拉丁字符用户列表乱码问题
问题场景
执行命令.\Pacli.exe USERSLIST INCLUDESUBLOCATIONS=YES output(name, enclose, type) > users.txt导出用户列表时,非拉丁字符显示为?或�;即使使用Get-Content -Encoding UTF8读取文件或提前设置$OutputEncoding = [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding`,问题依旧。
解决方法
直接捕获输出并指定编码写入文件
绕过控制台重定向的编码限制,用PowerShell直接捕获命令输出,再通过Out-File指定UTF-8编码写入:$users = .\Pacli.exe USERSLIST INCLUDESUBLOCATIONS=YES output(name`, enclose`, type`) $users | Out-File -FilePath users.txt -Encoding UTF8转换编码适配Pacli输出
如果Pacli使用OEM编码输出,先获取控制台编码,再将输出转换为UTF-8:$oemEncoding = [Console]::OutputEncoding $users = .\Pacli.exe USERSLIST INCLUDESUBLOCATIONS=YES output(name`, enclose`, type`) | ForEach-Object { [System.Text.Encoding]::UTF8.GetString($oemEncoding.GetBytes($_)) } $users | Out-File -FilePath users.txt -Encoding UTF8用Start-Process指定输出编码
通过Start-Process的参数直接指定标准输出的编码,彻底避开控制台编码干扰:Start-Process -FilePath .\Pacli.exe -ArgumentList 'USERSLIST INCLUDESUBLOCATIONS=YES output(name`, enclose`, type`)' -NoNewWindow -RedirectStandardOutput users.txt -Encoding UTF8
内容的提问来源于stack exchange,提问作者Marisol
相关产品推荐
相关产品推荐

