【问题标题】:Invoke-Command changes the output encodingInvoke-Command 更改输出编码
【发布时间】:2018-08-23 19:50:49
【问题描述】:

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

脚本是:

Net users /domain

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

用户本地运行示例:

Net users /domain
Adam Ñ

用户使用 Invoke-Command 远程运行的示例:

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

我在 Windows 10 1803 中找到了一个修复程序,它可以选择始终使用 UTF-8 Unicode。 Windows 10 1803 option only

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

我能做什么?

谢谢

【问题讨论】:

  • net 之前尝试chcp 65001 | out-null;
  • 或者使用更多的Powershell方式:[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8& "$env:windir\system32\chcp.com" 65001

标签: powershell unicode encoding invoke-command


【解决方案1】:

我设法让它工作。 我在网上搜索答案,遇到了这个帖子: 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”的进程,它实际上是控制台。然后运行 ​​[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8 并最终启动 Invoke-Command 它给了我一个编码结果:)

我运行的脚本是:

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

结果:

Adam Ñ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多