при условии, что $ 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 символов)если я хорошо помню, должно быть дополнительное ограничение на длину одного параметра, а также в зависимости от системы, на которой вы его используете.