是否有用于将多行PowerShell脚本转换为编码命令的程序?
我有一个PowerShell脚本,我想将其转换为编码命令。这通常需要将脚本转换为单个语句,并用;
分隔子语句。
是否有任何程序可以将多行PowerShell脚本转换为可以使用powershell.exe -EncodedCommand <cmd>
运行的Base64编码命令?
PS脚本:
Invoke-Command -ScriptBlock {
param(
[Parameter(Mandatory=$false)][string]$param1
)
$a = 10
$b = 5
$c = $a + $b
Write-Host "$a + $b = $c"
function f($a, $b) {
if ($a -lt $b) {
return $a
}
return $b
}
Write-Host "(f $a $b) = $(f $a $b)"
} -ArgumentList "HelloWorld"
powershell.exe -EncodedCommand :
$DebugPreference = 'Continue'
$content = Get-Content "$file"
Write-Debug "Content: $content"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($content)
$b64 = [System.Convert]::ToBase64String($bytes)
Write-Debug "Base64: $b64"
powershell.exe -EncodedCommand "$b64"
错误:
At line:1 char:118
+ ... r(Mandatory=$false)][string]$param1 ) $a = 10 $b = 5 ...
+ ~~
Unexpected token '$b' in expression or statement.
At line:1 char:129
+ ... =$false)][string]$param1 ) $a = 10 $b = 5 $c = $a + ...
+ ~~
Unexpected token '$c' in expression or statement.
At line:1 char:146
+ ... ) $a = 10 $b = 5 $c = $a + $b Write-Host "$a + $ ...
+ ~~~~~~~~~~
Unexpected token 'Write-Host' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
答案 0 :(得分:1)
假设$ expression的类型为[ScriptBlock]
$expression = {Write-Output "Hello, World!"}
或者如果您有多行脚本,则该脚本在文件中
$expression = get-content .\MyScriptFile.ps1
或者在任何情况下您都有多行字符串
$expression =
@"
Write-Output "Hello, World!";
Write-Output "Another line";
"@;
注意:记得输入; (分号)在每个语句行的末尾
您应该就能做到
$commandBytes = [System.Text.Encoding]::Unicode.GetBytes($expression)
$encodedCommand = [Convert]::ToBase64String($commandBytes)
$ encodedCommand然后可以像这样传递给powershell
powershell.exe -EncodedCommand $encodedCommand
注意:您可能会遇到一些长度限制,这不是由于Powershell基础架构本身引起的,而是由命令行解释器处理参数的方式(Windows上的命令行最大长度为32767)总的来说,如果我记得char的话,那么对单个参数的长度也应该有额外的限制,具体取决于您在其上运行的系统。
答案 1 :(得分:0)
根据@mosè-bottacini 的回答,要成功编码/解码多行脚本,请尝试在使用 -Raw
时添加 Get-Content
标志,如下所示:
$expression = Get-Content -Path .\MyScriptFile.ps1 -Raw