如何将参数从BAT文件传递给编码的powershell脚本

如何将参数从BAT文件传递给编码的powershell脚本

我想从 Windows 批处理执行编码的 powershell 脚本并将参数传递给它。

我们以下面的脚本为例:

param (
    $foo
)
Write-Host("Hello World!" + $foo)

将其编码为base64后,结果为:

cABhAHIAYQBtACAAKAANAAoAIAAgACAAIAAkAGYAbwBvAA0ACgApAA0ACgBXAHIAaQB0AGUALQBIAG8AcwB0ACgAIgBIAGUAbABsAG8AIABXAG8AcgBsAGQAIQAiACAAKwAgACQAZgBvAG8AKQA=

然后我创建一个批处理脚本:

@ECHO OFF
powershell.exe -EncodedCommand "cABhAHIAYQBtACAAKAANAAoAIAAgACAAIAAkAGYAbwBvAA0ACgApAA0ACgBXAHIAaQB0AGUALQBIAG8AcwB0ACgAIgBIAGUAbABsAG8AIABXAG8AcgBsAGQAIQAiACAAKwAgACQAZgBvAG8AKQA="

我如何将参数传递给 powershell 以使其在“Hello World!”之后输出 $foo 的值?

由于情况所限,我无法创建另一个脚本文件或类似文件。整个过程应包含在 BAT 文件中。

答案1

Powershell 不支持将参数传递给本机加密的脚本。

但是您可以在 .bat 文件中设置变量,然后在脚本中检索它们。

例如:

$command = 'write-host $env:test '
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)

$encodedCommand

编码后的命令现在是:dwByAGkAdABlAC0AaABvAHMAdAAgACQAZQBuAHYAOgB0AGUAcwB0ACAA

在您的批处理文件中,您现在可以拥有:

@echo off
set test=MyVar
Powershell -encodedcommand dwByAGkAdABlAC0AaABvAHMAdAAgACQAZQBuAHYAOgB0AGUAcwB0ACAA

当您运行批处理文件时,它现在将打印MyVar

相关内容