使用powershell-file/path/to/ps1在本地运行自解密base64 powershell脚本

使用powershell-file/path/to/ps1在本地运行自解密base64 powershell脚本,powershell,base64,Powershell,Base64,我希望将我的powershell脚本保留在base64中的本地服务器上,但当从schtasks或本地使用powershell-file/path/to/ps1运行时,它们会自行解码。这可能吗 我试过: 函数Decode{$data='base64脚本' [系统.文本.编码] ::ASCII.GetString([System.Convert]::FromBase64String($data))} 解码 这是行不通的。有什么想法吗?我认为这种情况至少有两种选择。一个选项是使用-EncodedCom

我希望将我的powershell脚本保留在base64中的本地服务器上,但当从schtasks或本地使用powershell-file/path/to/ps1运行时,它们会自行解码。这可能吗

我试过:

函数Decode{$data='base64脚本'

[系统.文本.编码] ::ASCII.GetString([System.Convert]::FromBase64String($data))}

解码


这是行不通的。有什么想法吗?

我认为这种情况至少有两种选择。一个选项是使用
-EncodedCommand
参数将base64编码的命令发送到Powershell.exe。第二个选项是创建解码脚本,以接受另一个包含base64编码命令作为参数值的脚本


选项1:传递编码命令

这假定base64编码的命令是使用UTF-16LE字符编码(Unicode)格式化的PowerShell命令的字符串版本。我们还假设您有一个名为
Encoded.ps1
的脚本,其中包含base64编码的命令。满足先决条件后,可以执行以下操作:

Powershell.exe -EncodedCommand (Get-Content Encoded.ps1)

选项2:针对编码脚本运行解码脚本

在这种情况下,unicode要求并不重要(如果愿意,可以使用ANSI)。您只需要知道原始的命令字符串编码,就可以正确地对其进行解码。我们将假定ASCII字符集。我们还假设
Encoded.ps1
包含base64编码的命令

首先,让我们创建名为decode.ps1的解码脚本

# Decode.ps1
param([string]$FilePath)

$64EncodedData = Get-Content $FilePath  
$DecodedData = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($64EncodedData))

& ([scriptblock]::Create($DecodedData))
其次,让我们运行Powershell.exe命令来解码
Encoded.ps1
,并执行解码命令

Powershell.exe -File Decoded.ps1 -FilePath Encoded.ps1

上面的代码不是用来显示解码命令的内容,而是用来执行解码命令
$FilePath
是指向
编码的.ps1
文件的路径,该文件包含来自ASCII编码字符集的base64编码字符串。您可以在
Decode.ps1
文件中更改为适用于您的情况的任何编码
$DecodedData
包含原始命令字符串。最后,创建一个包含
$decodedata
的脚本块,然后使用调用操作符
&

进行调用,出于好奇,这个脚本块的驱动程序是什么?我曾经按照建议使用过
-EncodedCommand
,但这是因为我正在生成代码。谢谢您的帮助。我会把你的答案标记为正确的!非常感谢