我似乎无法获得脚本的base64代码以在批处理文件中执行。在Powershell ISE中,我可以做到以下几点并且工作正常......
$script = {200 lines of script here}
$bytes = [System.Text.Encoding]::Unicode.GetBytes($script)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand
[Windows.Forms.Clipboard]::SetText( $encodedCommand )
代码执行并提供我期望的输出,并将base64代码复制到剪贴板。
但是,如果我打开记事本并在" powershell.exe -encodedCommand"之后粘贴代码。并尝试运行它我得到一个错误说"无法处理命令,因为-EncodedCommand指定的值未正确编码。该值必须为Base64编码。"
任何想法我做错了什么?
顺便说一下编码文本是32676个字符但是在大约8K个字符后抛出错误所以我想知道是否对接受的base64代码的大小有限制。
我这样做的原因是在批处理文件中运行脚本而不必调用ps1文件而不必将整个脚本放在一行上,这使得无法读取。我知道我会遗漏几个逗号,然后开始拉我的头发! :)
任何帮助表示赞赏。
由于 B
答案 0 :(得分:3)
cmd
命令行限制为2047(xp)或8191(vista及更高版本)字符(KB830473)
答案 1 :(得分:1)
预先测试$ encoded命令的长度。
$encodedCommand
$max = 8190
If ($encodedCommand.Length -gt $max)
{Write-Warning "$encodedCommand.Length is too large to run from cmd.exe."}