调用命令更改输出编码



我正在使用在少数计算机上运行的脚本,在每台计算机上运行Net命令查询,并将任何一台计算机的结果与Compare-Object进行比较。

脚本为:

Net users /domain

我环境中的一些用户有西班牙语字母。 在本地运行命令时,输出返回的用户正确字母是西班牙语, 但是,当使用Invoke-Command从另一台计算机远程运行它时,这些特定用户的输出会显示符号。

本地运行的用户示例:

Net users /domain
Adam Ñ

使用调用命令远程运行的用户示例:

Invoke-Command -Computername MyWin7Comp -scriptblock {
Net users /domain}
Adam ¥

我在Windows 10 1803中发现了一个修复程序,可以选择始终使用UTF-8 Unicode。 仅限视窗 10 1803 选项

它奏效了! 在这台 Windows 10 1803 机器上远程运行脚本可以完美运行,但我也想在旧版本上运行......

我能做什么?

谢谢

我设法让它工作。 我在网上搜索答案并遇到了这篇文章: https://social.technet.microsoft.com/Forums/en-US/b92b15c8-6854-4d3e-8a35-51b4b56276ba/powershell-ise-vs-consoleoutputencoding?forum=ITCG

有 1 个答案解释说,当使用 PowerShell ISE(我基本上使用的是(时,控制台实际上没有控制台的进程。 这就是为什么当我尝试使用Jeren Mostert和Theo答案时,它不起作用,因为实际上没有控制台。

我所要做的就是使用 Out-Null 运行 EXE,这将打开一个名为"conhost.exe"的进程,实际上是控制台。然后运行 [控制台]::输出编码 = [Text.UTF8Encoding]::UTF8 并最终启动了调用命令,它给了我一个编码结果:)

我正在运行的脚本是:

Ping.exe | Out-Null
[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
Invoke-Command -Computername MyW7Comp -ScriptBlock {Net Users /domain}

结果:

Adam Ñ

最新更新