2016-09-20 6 views
2

$IOCで配列から項目を引き出し、各項目に対して$ API here-stringの$ IMPORTを置き換えてコンソールに結果をエコーし​​ますその後、$IOC配列内の各項目についてそれを行います。ここで変数置換を行うには

#put IOC's into array 
$IOC= ‘c:\Users\powershell_array.txt' 
#api curl script with variable to be replaced 
$API = @" 
curl --insecure 'https://192.168.1.1:3000/hx/api/v2/indicators/Custom/Powershell_AD/conditions/execution' -X 'POST' --data-binary " 
{ 
    \"tests\":[ 
     { 
     \"token\":\"processEvent/ActiveDirectory\", 
     \"type\":\"text\", 
     \"operator\":\"contains\", 
     \"preservecase\":false, 
     \"value\":\"$IMPORT\" 
     } 
    ] 
}" -H 'X-FeApi-Token: IAOaiq1s2' -H 'Accept: application/json' -H 'Content-Type: application/json'" 
"@ 

ForEach ($i in Get-Content $IOC) {$API -replace $IMPORT, $i} echo $API 

私はエラーを取得しないが、それは単に、配列の内容を出力し、その後、交換せずにコースのエコーの$API 1時間。

答えて

1

$IMPORTは、here-stringが$APIに割り当てられるとすぐに評価され、拡張されます。

リテラルここでは、文字列('代わりの")に変更し、それをして-replaceパターン引数に\$をエスケープすることを忘れないでください:変数が評価される時期について

$API = @' 
curl --insecure 'https://192.168.1.1:3000/hx/api/v2/indicators/Custom/Powershell_AD/conditions/execution' -X 'POST' --data-binary " 
{ 
    \"tests\":[ 
     { 
     \"token\":\"processEvent/ActiveDirectory\", 
     \"type\":\"text\", 
     \"operator\":\"contains\", 
     \"preservecase\":false, 
     \"value\":\"$IMPORT\" 
     } 
    ] 
}" -H 'X-FeApi-Token: IAOaiq1s2' -H 'Accept: application/json' -H 'Content-Type: application/json'" 
'@ 

foreach ($i in Get-Content $IOC) { 
    $API -replace '\$IMPORT', $i 
} 
+0

どちらも本当に助けましたが、残念ながら私はまだポイントを与えることはできませんが、それは非常に感謝しています! –

3

Mathias has it right。あなたが意図したのと同じロジックを可能にするもう1つのアプローチは、format operatorを使用することです。ループ中に置き換えられるさまざまな変数(この場合は1つ)の変数を保持するように文字列を更新します。 {n}(この場合は{0})を使用し、同じサイズの配列をプレースホルダの数に供給します。

$API = @' 
curl --insecure 'https://192.168.1.1:3000/hx/api/v2/indicators/Custom/Powershell_AD/conditions/execution' -X 'POST' --data-binary " 
{{ 
    \"tests\":[ 
     {{ 
     \"token\":\"processEvent/ActiveDirectory\", 
     \"type\":\"text\", 
     \"operator\":\"contains\", 
     \"preservecase\":false, 
     \"value\":\"{0}\" 
     }} 
    ] 
}}" -H 'X-FeApi-Token: IAOaiq1s2' -H 'Accept: application/json' -H 'Content-Type: application/json'" 
'@ 

ForEach ($i in Get-Content $IOC){$API -f $i} 

このアプローチが機能するための正規表現のオーバーヘッドがしかし必要ありませんあなたは、文字列中にすでに存在する任意の中括弧を2倍にする必要があります。 I had that problem in the past以来私が忘れるために少し恥ずかしい。

+0

私はあまりにも、最初は考えました。文字列の '{}'リテラルを除いて、プレースホルダーのフォーマットが妨げられます: - \ –

+0

'tests'の外側のオブジェクトと内側のオブジェクトの両方 –

+0

@ MathiasR.Jessenもう一度感謝します。私はそれが起こる可能性があることを知って以来、私は愚かな気がするが、私は答えたときにそれらを探していなかった。 – Matt

関連する問題