我想从 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
。