Использование PowerShell 4.0 и командлета Invoke-RestMethod. У меня проблемы с параметрами -OutFile и -PassThru. Каждый раз, когда я добавляю параметр -PassThru, создается мой -OutFile, но его содержимое остается пустым!
Согласно документации Invoke-RestMethod, при совместном использовании этих параметров должны быть доступны как выходной файл, так и объект конвейера. "-OutFile Сохраняет тело ответа в указанном выходном файле. [...] Чтобы отправить результаты в файл и в конвейер, используйте параметр Passthru."
Вот тест, чтобы повторить возникшую у меня проблему. Здесь я вызываю rest api, пытаясь ОБА сохранить ответ в файл И десериализовать его в объект PowerShell.
"POWERSHELL VERSION $($host.Version.ToString())"
$date = Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt" -PassThru
Get-Content "OutFile.txt"
# FILE IS EMPTY!!! PASSTHRU SEEMS TO RESULT IN EMPTY FILE
$date
# powershell object has the date received from api
Вот два теста для проверки нормальной работы Invoke-RestMethod БЕЗ параметра PassThru.
# ... Test # 1, call rest api and deserialize into powershell object
$date = Invoke-RestMethod "http://date.jsontest.com"
$date
# Output shows the date retrieved from sample restful service
# ... Test # 2, call rest api and save response body directly to a file
Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt"
Get-Content "OutFile.txt"
# Output shows contents of rest api response body (json text)
Я думаю, что эти тесты должны помочь другим увидеть мою проблему. Мой вопрос: есть ли что-то, что мне не хватает для выполнения этой работы, или это может быть ошибка командлета? Я немного искал решение в Google, но никаких очевидных сообщений об этой проблеме нет. Я хочу использовать -OutFile как часть обходного пути для другой проблемы Invoke-RestMethod, связанной с кодированием контента, как описано на Ошибка? Данные Invoke-RestMethod и UTF-8. Параметр -PassThru полезен для меня, чтобы просмотреть возвращенные данные и завершить итерацию для набора результатов odata с несколькими запросами (с разбивкой на страницы).
Tee-Object
- person BenH   schedule 25.03.2017Invoke-RestMethod
является оболочкойInvoke-WebRequest
, происходящей отWebRequestPSCmdlet
. В этом коде есть переменные с именемShouldSaveToOutFile
, которые проверяют, указали ли вы имя файла, иShouldWriteToPipeline
как(!ShouldSaveToOutFile || PassThru)
. Похоже, он должен работать так, как вы думаете. Файл, если вы его назвали, иначе конвейер. И то, и другое, если вы использовали Outfile и passthru. - person TessellatingHeckler   schedule 25.03.2017if (ShouldWriteToPipeline)
иif (ShouldSaveToOutFile)
. Эти ссылки предназначены для открытого исходного кода PSv6 ... так что также могла быть ошибка в версии 4 и исправлена. - person TessellatingHeckler   schedule 25.03.2017irm https://httpbin.org/get?q=1♫
, и музыкальная нота вернулась в консоль. Заголовки, которые он отправляет обратно, имеютContent-Type: application/json
. Другойirm http://httpbin.org/encoding/utf8
отправляет заголовокContent-Type: text/html; charset=utf-8
, и Unicode приходит через OK. Если ваш REST сказал utf8 ... - person TessellatingHeckler   schedule 25.03.2017Invoke-RestMethod "http://date.jsontest.com" -PassThru -OutFile .\Out2.txt | Out-File .\Out.txt
- person SavindraSingh   schedule 09.07.2018