1

私は非常に多くの行を持つスクリプトを持っています。このスクリプトは、編集せずに scriptblock パラメーターに簡単に貼り付けることができます (たとえば、スクリプト内の引用符の前にバックスラッシュを置きます)。次に、スクリプトをエンコードして、エンコードされたパラメーターとして powershell に渡すことができます。

$myscript = {
#paste of simplified script
$calc = 6 + 9
echo $calc
}

# Convert script to a string
$command = $carvingScript.ToString()
# Convert string to base64 encoded command
$bytes = [System.Text.Encoding]::Unicode.GetBytes( $command )
$encodedCommand = [Convert]::ToBase64String( $bytes )

base64 に変換されるスクリプトで 1 つのパラメーターを渡すことができるようにしたいと考えています。このような:

$parameter = 9
$myscript = {
$calc = 6 + $parameter
echo $calc
}

これに取り組む方法はありますか?scriptblock に引数を含めることができることはわかっていますが、引数を解析するには、1 つのパラメーターだけでなく、スクリプト全体を解析する必要があります。

4

2 に答える 2

2

スクリプト ブロックに変数を追加する方法に対する直接的な答えは次のとおりです。

$parameter = 9

$myscript = @'
$calc = 6 + {0}
echo $calc
'@ -f $parameter

$scriptblock = [scriptblock]::Create($myscript)

基本的に文字列としてビルドし、create メソッドを使用し[scriptblock]て変換します。

ただし、後で直接文字列に変換するだけなので、スクリプトブロックの作成をスキップできます。

于 2017-01-08T20:27:24.167 に答える