如何使用 C# 将 powershell 脚本编码为 base64 UTF16-LE 字符串
Posted
技术标签:
【中文标题】如何使用 C# 将 powershell 脚本编码为 base64 UTF16-LE 字符串【英文标题】:How do i encode powershell script to base64 UTF16-LE string using C# 【发布时间】:2021-12-25 09:35:22 【问题描述】:我想从字符串编码一个 powershell 脚本,但我无法将其编码为 UTF16-LE。
我正在使用它来将其编码为 base64 字符串。
string encodedscript = "powershell -nop -enc " + Convert.ToBase64String(Encoding.UTF8.GetBytes(PowerShellScript));
但是当我尝试使用 UTF16-LE 编码时,它不起作用,例如:
string encodedscript = "powershell -nop -enc " + Convert.ToBase64String(Encoding.UTF16-LE.GetBytes(PowerShellScript));
所以我的问题是如何使用 c# 对 Powershell 脚本进行编码,以便 Powershell 可以接受。
我正在尝试用 C# 在这个网站上实现类似的目标: https://raikia.com/tool-powershell-encoder/
这是代码示例,powershell 脚本 PowerShellScript 非常长。
这里是一些示例编码脚本:https://pastesite.org/view/raw/74b98937
示例脚本:https://pastesite.org/view/raw/b573f289
【问题讨论】:
Encoding.Unicode
@Theo 我一直收到此错误:程序'powershell.exe'无法运行:文件名或扩展名太长在行:1 char:1 + powershell -nop -enc DQAKACQAZwBHAEIATABkAHkAIAA9ACAAWwBTAHkAcwB0AGUA ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~。在 line:1 char:1 + powershell -nop -enc DQAKACQAZwBHAEIATABkAHkAIAA9ACAAWwBTAHkAcwB0AGUA ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FullyQualifiedErrorId : NativeCommandFailed
另外,当我从批处理文件运行时,我得到这个错误:系统无法执行指定的程序。
如果我将您提供的链接(结果 RwBlAHQALQBEAGEAdABlAA==
)中的“Get-Date”结果与 PowerShell [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("Get-Date"))
进行比较,它会给我一个相同的结果。这意味着在 C# Convert.ToBase64String(Encoding.Unicode.GetBytes(PowerShellScript))
中我猜会做同样的事情吗?另见this answer
请展示一个完整的、最少的代码示例,我们可以使用它来尝试重现问题。我们不知道PowerShellScript
是什么,您是否以及如何从磁盘读取它等等。
【参考方案1】:
好的,谢谢大家,感谢大家的帮助,我提出了这个批处理脚本,它作为 powershell 脚本重新启动,仍然可以工作。 但它在启动时显示错误。我用 && cls 压制它
#^ &@@Echo Off && Cls && Powershell -exec bypass -nop -noni - < "%~f0" && exit /B
#POWERSHELL CODE GOES HERE!
【讨论】:
这是一个非常酷的方法!提醒我我已经为 a script which is both Bash shell and PowerShell 回答了类似的问题,但我没有想到这个用例的类似问题。 @TessellatingHeckler 谢谢!以上是关于如何使用 C# 将 powershell 脚本编码为 base64 UTF16-LE 字符串的主要内容,如果未能解决你的问题,请参考以下文章