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