如何在此处字符串中进行变量替换

Dir*_*itt 5 powershell

我试图从 中的数组中提取项目$IOC,然后对于每个项目替换 $API here-string 中的 $IMPORT 并将结果回显到控制台,然后对数组中的每个项目执行此操作$IOC

\n\n
#put IOC\'s into array\n$IOC= \xe2\x80\x98c:\\Users\\powershell_array.txt\'\n#api curl script with variable to be replaced\n$API = @"\ncurl --insecure \'https://192.168.1.1:3000/hx/api/v2/indicators/Custom/Powershell_AD/conditions/execution\' -X \'POST\' --data-binary "\n{  \n   \\"tests\\":[  \n       {  \n         \\"token\\":\\"processEvent/ActiveDirectory\\",\n         \\"type\\":\\"text\\",\n         \\"operator\\":\\"contains\\",\n         \\"preservecase\\":false,\n         \\"value\\":\\"$IMPORT\\"\n      }\n   ]\n}" -H \'X-FeApi-Token:   IAOaiq1s2\' -H \'Accept: application/json\' -H \'Content-Type: application/json\'"\n"@\n\nForEach ($i in Get-Content $IOC) {$API -replace $IMPORT, $i} echo $API\n
Run Code Online (Sandbox Code Playgroud)\n\n

我没有收到错误,但它只是打印数组的内容,然后当然会回显$API一次而不进行替换。

\n

Mat*_*att 5

马蒂亚斯关于何时评估变量的说法是正确的。另一种允许与您想要的逻辑相同的方法是使用格式运算符。更新您的字符串以包含各种变量(在本例中为 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}
Run Code Online (Sandbox Code Playgroud)

不需要正则表达式开销,但是要使这种方法起作用,您需要将字符串中已经存在的任何花括号加倍。因为我过去也遇到过这个问题,所以忘记了有点尴尬。


Mat*_*sen 4

$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
}
Run Code Online (Sandbox Code Playgroud)