Загрузите файл с помощью Invoke-WebRequest

Используя PowerShell 7, я успешно загружаю файл с помощью Invoke-RestMethod:

$Uri = '...(my url)...'
$File = '...(path to my file)...'
$Form = @{
    f = Get-Item -Path $File
}
$Result = Invoke-RestMethod -Uri $Uri -Method Post -Form $Form -StatusCodeVariable 'HttpStatus'

Я бы хотел сделать то же самое с Invoke-WebRequest; Я предпочитаю Invoke-WebRequest, потому что его возвращаемое значение имеет удобную структуру с полями состояния и содержимого внутри, поэтому я могу избавиться от переменной $ HttpStatus и просто преобразовать результат в JSON с помощью '$ Result.Content | ConvertFrom-Json '.

В документации по командлету Invoke-WebRequest есть пример загрузки: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7, пример 6. Но он использует командлет Invoke-RestMethod. Разве это не опечатка в документации? Могу ли я использовать Invoke-WebRequest так же просто, как в примере Invoke-RestMethod?


person Pokvalitov    schedule 21.03.2020    source источник
comment
Invoke-RestMethod по сути является оболочкой для Invoke-WebRequest, которая принимает свойство Content и пытается применить к нему ConvertFrom-Json. Другими словами, вы можете обычно заменять iwr на irm везде, где вы его видите, но у вас будет дополнительный шаг преобразования ответа из JSON или XML или чего-то еще.   -  person FoxDeploy    schedule 21.03.2020


Ответы (1)


Я успешно заменил командлет в своем коде на Invoke-WebRequest:

$Result = Invoke-WebRequest -Uri $Uri -Method Post -Form $Form -SkipHttpErrorCheck
$httpStatus = $Result.StatusCode
if ($httpStatus -eq 200)
{
    $j = $Result.Content | ConvertFrom-Json
    . . . .
}

FoxDeploy, ваш комментарий оказался весьма полезным. Спасибо.

person Pokvalitov    schedule 08.04.2020