将Base64编码的powershell脚本复制到批处理文件

时间:2014-10-24 16:25:43

标签: powershell batch-file base64

我似乎无法获得脚本的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

2 个答案:

答案 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."}