2016-09-20 2 views
2

$IOC의 배열에서 항목을 가져 오려고 시도한 다음 각 항목에 대해 $ API here-string의 $ IMPORT를 바꾸고 결과를 콘솔에 표시합니다. 그런 다음 $IOC 배열의 각 항목에 대해 이렇게합니다.here-string에서 변수 대체를 수행하려면 어떻게해야합니까?

#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

$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합니다. 동일한 논리를 허용하는 또 다른 방법은 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 이후 나를 잊어 버리는 조금 당황 스럽네요.

+0

처음에는 그렇게 생각했습니다. 문자열의'{}'리터럴을 제외하고 형식 자리 표시자를 방해합니다. - \ –

+0

외부 객체와 내부 객체 모두 'tests' –

+0

@ MathiasR.Jessen 다시 감사드립니다. 나는 그 일이 일어날 수 있다는 것을 알기 때문에 어리석은 생각을하지만, 내가 대답 할 때 그들을 찾지 않았다. – Matt

관련 문제