powershell - Invoke-Command 更改输出编码
问题描述
我正在使用在几台计算机上运行的脚本,在每台计算机上运行 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 选项
它奏效了!在这台 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”的进程,它实际上是控制台。然后运行 [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 Ñ
推荐阅读
- reporting-services - 如何更改 SSRS 中分组列的位置
- wix - 使用主要版本零升级 WiX 生成的包
- elasticsearch - 弹性搜索响应命中未显示
- asp.net-core - AbpSession.UserId 登录后返回 null
- sapui5 - SAPUI5 列表排序问题
- angularjs - 单击时未激活分段按钮
- rest - RestTemplate:返回实体列表
- javascript - 如何使用 ajax Post 方法在没有 jQuery 的情况下提交用户输入
- ios - SQLITE 数据库上传
- java - 如何使用java计算数据库和当前日期之间的天数差异