Передача переменной в запросе из Powershell в Elasticsearch

Добрый день.

Хочу настроить возможность получать данные из ES через powershell. В моем случае это поиск по логу Exchange. Вижу это так: администратор запускает скрипт, вводит в переменные отправителя, получателя, дату и тему и получает результат в более-менее красивом формате. Скрипт у меня получился такой

$sender=Read-Host "Enter sender address"
#$recipient=Read-Host "Enter recipient address"
#$subject=Read-Host "Enter subject"

$json_body = '{
   "query": {
     "bool": {
            "must": [
         {
           "range": {
             "@timestamp": {
               "gte": "now-1d/d",
               "lte": "now/d"
             }
           }
         }
       ], 
       "should": [
         {
           "match": {
             "sender-address": "`"$sender`""
           }
         },
         {
           "match": {
           "recipient-address": "*"
           }
         },
         {
           "match_phrase": {
             "message-subject": "*"
           }
         }
       ]
     }
   }
}'

$result= Invoke-RestMethod -URI 'http://1.1.5.5:9200/exchange-*/_search?pretty' -Method 'POST' -ContentType 'application/json' -Body $json_body

$result.hits.hits._source | fl message-subject, sender-address, recipient-address, '@timestamp', source-context, event-id

Без использования переменных всё круто, но с переменными получаю такую ошибку:

Invoke-RestMethod : { "error" : { "root_cause" : [ { "type" : "json_parse_exception", "reason" : "Unexpected character ('$' (code 36)): was expecting comma to separate Object entries\n at 
[Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@4345e084; line: 17, column: 36]" } ], "type" : "json_parse_exception", "reason" : "Unexpected character ('$' (code 36)): was 
expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@4345e084; line: 17, column: 36]" }, "status" : 500 }
At line:39 char:10
+ $result= Invoke-RestMethod -URI 'http://1.1.5.5:9200/exchange-*/_search?pret ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Вообще возможно передавать переменные в таких запросах?

Самая важная часть в этой ошибке это:

Unexpected character ('$' (code 36)): ....  line: 17, column: 36 

Если посмотреть на запрос, то в строке 17 видим:

       "sender-address": "`"$sender`""

Другими словами $sender не заменятся а посылается как есть. Я powershell-ом не пользуюсь, но судя по всему это должно выглядить как-то так:

       "sender-address": "'+$sender+'"
1 Like

Спасибо! Я все переставлял " и ', а оказывается нужно было ставить +. Теперь все передается как надо.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.