【发布时间】:2020-11-17 16:07:43
【问题描述】:
我们有一个域范围的自动化工具,可以以管理员身份在服务器上启动作业(Stonebranch UAC - 请注意:这与 Windows“用户访问控制”无关,Stronebranch UAC 是一个企业自动化工具)。它在本地寻找 Cmd 批处理脚本,所以我们使用它们。
但是,我更喜欢使用 PowerShell 来处理所有事情,因此我使用 PowerShell 批量创建了数十个 .bat 脚本。没有任何效果,每当它尝试运行 .bat 脚本时,自动化工具就会崩溃。所以我削减了脚本,使它们包含一行echo 123,但一切都被破坏了。我们认为这是该工具的问题,但随后尝试在服务器上运行 .bat 脚本,它们也被破坏了,只是在命令行上生成了一些 unicode 并且无法运行。
因此,我们突然意识到 PowerShell 如何使用Write-Output 命令创建批处理脚本正在破坏它们(这是在 Windows 2012 R2 上,而 PowerShell 是 5.1)。我重复一遍,例如,如果我在 PowerShell 控制台上键入以下内容:
Write-Output "echo 123" > test.bat
如果我现在打开 cmd.exe 然后尝试运行 test.bat,我只会在屏幕上看到 2 个类似 unicode 的字符,而没有其他任何内容。
有人可以向我解释 a) 为什么会发生这种行为,以及 b) 我如何才能继续使用 PowerShell 来生成这些批处理脚本 它们不会被破坏?即我是否必须更改 BOM 或 UTF-8 设置或其他任何东西才能使其正常工作,请问我该怎么做?
【问题讨论】:
-
不是 PowerShell 专家,但据我所知,PowerShell 默认写入 Unicode。有一个写ANSI/ASCII的开关,但是我不记得了……
-
正如斯蒂芬指出的那样,您需要处理文件的编码。不要使用重定向的东西......而是使用允许您显式设置编码的“to file”命令之一。看看你通过搜索
powershell set file encoding得到什么... [grin] -
所以您认为带有编码标志的
Set-Content是一种方式(我永远无法理解所有的Unicode、UTF8 和BOM 以及所有这些东西!)?嗯,或者任何人都有从 PowerShell 创建批处理文件的 最佳 方法的示例(甚至,我如何获取文件并使用一些特殊的 cmdlet 来transmogrify 将该文件转换为非 Unicode 文件?)docs.microsoft.com/en-us/powershell/module/…
标签: powershell batch-file utf-8 automation windows-server-2012-r2