Powershell elasticsearch не работает, scrollId отсутствует

#powershell #elasticsearch

#powershell #elasticsearch

Вопрос:

Я создаю сценарий PowerShell для получения большого количества файлов из общедоступной службы (которой я не владею). Мне нужно использовать scroll API, чтобы получить все нужные мне файлы, но я столкнулся с проблемой: Elasticsearch по-разному реагирует на postman и PowerShell при предоставлении scroll_id.

Я воссоздал эти шаги вручную в postman без каких-либо проблем.

 Function scrollBody ($scrollID) {
    $scrollBody = @"
    {
        "scroll": "2m",
        "scroll_id": "$scrollId"
    }
"@
    return $scrollBody
}


    $body = (scrollBody `
        -scrollID $scrollID
    | ConvertFrom-Json)

    $scrollUri = $ServerUri   "/_search/scroll"
    $response = Invoke-WebRequest `
        -Method GET `
        -Uri $scrollUri `
        -ContentType 'application/json' `
        -Body $body `
        | ConvertFrom-Json
  

У меня есть рабочий идентификатор прокрутки из другой части кода, но я протестировал идентификаторы, используя postman, и они работают нормально.

Я подозреваю, что именно так я предоставляю тело, но я застрял с этой ошибкой:

 {
    "error": {
        "root_cause": [
            {
                "type": "action_request_validation_exception",
                "reason": "Validation Failed: 1: scrollId is missing;"
            }
        ],
        "type": "action_request_validation_exception",
        "reason": "Validation Failed: 1: scrollId is missing;"
    },
    "status": 400
}
  

Заранее спасибо

Комментарии:

1. Можете ли вы предоставить, какую именно службу вы пытаетесь запросить?

2. @AndrewRyanDavis да, это общедоступная служба, которая также не требует аутентификации. distribution.virk.dk/offentliggoerelser/_search

Ответ №1:

Я не могу проверить, но, похоже, у вас синтаксическая ошибка при вызове вашей функции для создания объекта с помощью scrollID.

Вы можете просто добавить это в хэш запроса, и его будет немного легче читать. Обратные ссылки являются чем-то вроде антишаблона.

 $serverUri = 'http://distribution.virk.dk/offentliggoerelser/_search/scroll'

$iwrParams = @{
    'Uri'         = $serverUri
    'Method'      = 'GET'
    'ContentType' = 'applications/json'
    'UseBasicParsing' = $true
    'Body' = @{
        'scroll'    = '2m'
        'scroll_id' = $scrollId
    }
}

Invoke-WebRequest @iwrParams
  

Комментарии:

1. Разве параметры не должны содержать идентификатор прокрутки?

2. Да, извините, я по ошибке удалил его во время тестирования, потому что я не знаю $scrollId значения. Похоже, что это получает ответы, хотя теперь, когда я тестирую по указанному вами URL-адресу.