如何在here-string中进行变量替换

时间:2016-09-20 16:38:51

标签: powershell

我试图从$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一次而没有替换。

2 个答案:

答案 0 :(得分:4)

Mathias has it right关于何时评估变量。另一种允许使用相同逻辑的方法是使用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}

不需要正则表达式开销,但是要使用此方法,您需要将字符串中已存在的任何花括号加倍。自I had that problem in the past以来我忘记了一点尴尬。

答案 1 :(得分:2)

只要将here-string分配给$IMPORT,就会对

$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
}