如何使用C#将PowerShell脚本编码为可识别的UTF16-LE格式Base64字符串
C#编码PowerShell可执行的Base64脚本方案
错误原因
- PowerShell的
-enc(-EncodedCommand的缩写)参数仅接受 UTF-16LE编码字节流转Base64 后的字符串,你最初使用UTF8编码不符合参数要求,自然无法执行。 - 你写的
Encoding.UTF16-LE属于错误的C#语法,.NET 类库中对应UTF-16LE编码的实例是Encoding.Unicode,错误的编码对象无法生成符合要求的字节序列。
正确实现代码
using System.Text; // 你的原始PowerShell脚本内容,支持任意长度 string PowerShellScript = "这里替换为你的实际脚本内容"; // 1. 用UTF-16LE(对应C#中的Encoding.Unicode)转字节数组 byte[] scriptUtf16Bytes = Encoding.Unicode.GetBytes(PowerShellScript); // 2. 字节数组转Base64 string base64Encoded = Convert.ToBase64String(scriptUtf16Bytes); // 3. 拼接最终命令 string runCommand = "powershell -nop -enc " + base64Encoded;
注意事项
- 无需额外添加字节序标记(BOM),
Encoding.Unicode.GetBytes()默认不会输出BOM,刚好匹配PowerShell的参数要求。 - 中文、特殊符号、超长脚本都可以正常支持,Base64编码无长度限制,PowerShell可正常解析长编码参数。
内容的提问来源于stack exchange,提问作者Speed Runer
相关产品推荐
相关产品推荐

