如何使用 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 执行 PowerShell 脚本

如何从 C# 程序运行 PowerShell 脚本?

如何从 C# 中的 powershell 脚本中捕获退出代码

如何在PowerShell脚本中嵌入EXE文件

CSV 脚本的 PowerShell 获取计数器,编码问题

从 C# 异步运行多个 PowerShell 脚本