PowerShell’s Invoke-RestMethod эквивалент curl -u (базовая аутентификация)

Что эквивалентно

curl -u username:password ... 

в Invoke-RestMethod ? Я попробовал это:

 $securePwd = ConvertTo-SecureString "password" -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($username, $securePwd) Invoke-RestMethod -Credential $credential ... 

но он возвращает 401, Unauthorized.

Это единственный метод, который работал для меня до сих пор:

 $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ... 

Но я не верю, что нет лучшего способа.

Я не уверен, почему параметр -Credential не работает в вашем случае, но он работает с сервисом httpbin .

Вы можете попробовать следующее:

 $pwd = ConvertTo-SecureString "MyPassword" -AsPlainText -Force $cred = New-Object Management.Automation.PSCredential ('PsUser', $pwd) Invoke-RestMethod 'http://httpbin.org/basic-auth/PsUser/MyPassword' -cred $cred 

Изменить: как отмечено в комментариях, этот метод не будет отправлять заголовок авторизации в исходный запрос. Он ожидает ответа на вызов, а затем повторно отправляет запрос с заголовком авторизации. Это не будет работать для служб, для которых требуются учетные данные для первоначального запроса.

Кажется, вы должны комбинировать методы, когда они терпят неудачу независимо.

Создайте учетные данные и добавьте их в запрос.

Создайте заголовок и добавьте его в запрос.

 $username = "username"; $password = ConvertTo-SecureString –String "password" –AsPlainText -Force $credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $username, $password $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) $getProjectUri = "yourUri" Invoke-RestMethod -Method Get -Uri $getProjectUri -Headers @{Authorization = "Basic $base64AuthInfo" } -Credential $credential -ContentType "application/json" 

Эта версия работает с объектом PSCredential от Get-Credential . Он также работает кросс-платформенной в PowerShell 6.0. Он делает это, избегая использования вызовов BSTR, которые иногда предлагаются при попытке извлечь пароль из PSCredential .

 $creds = Get-Credential $unsecureCreds = $creds.GetNetworkCredential() $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $unsecureCreds.UserName,$unsecureCreds.Password))) Remove-Variable unsecureCreds Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} ... 

Я обнаружил, что использование параметра -WebSession работает, если вы предварительно создали объект WebRequestSession с учетными данными. Я не буду переосмысливать, как создать объект Credential PS, поскольку это уже было рассмотрено в других ответах.

 $WebSession = New-Object -TypeName Microsoft.PowerShell.Commands.WebRequestSession -Property @{Credentials=$Credential} Invoke-RestMethod -Uri "your_URI" -WebSession $WebSession 

Этот подход отправляет заголовок auth при первом вызове, поэтому позволяет избежать ответа 401.

Кстати, этот подход также может использоваться для установки сведений прокси-сервера (которые не работают должным образом во всех версиях PS, когда они указаны с использованием параметров), и обрабатывает cookies, если это требует ваш API.

  • Автоматически экспортировать историю в конце сеанса PowerShell
  • Как я могу заменить каждое вхождение String в файл с помощью PowerShell?
  • Как выполнить нажатие клавиши внутри powershell?
  • Использование Invoke-Command -ScriptBlock для функции с аргументами
  • Как я могу исключить несколько папок с помощью Get-ChildItem -exclude?
  • Зацикливание файлов и сбор данных
  • Как вызвать пакетный скрипт из Powershell?
  • Как получилось, что Powershell, выполненный с «run» и с закрепленным значком, имеет разные настройки?
  • Powershell: всегда генерируется нулевой файл (вывод Compare-Object)
  • Как создать объект, который выводит список (не таблица)
  • Сравнение двух массивов и получения значений, которые не являются общими
  • Interesting Posts

    Как получить идентификатор SID входа в C #

    канонический способ рандомизации NSArray в Objective C

    Оптимизация утечки памяти в JavaFX

    Разница между статическими и частными статическими переменными

    Лучший способ в asp.net заставить https для всего сайта?

    Определение, существует ли активность на текущем устройстве?

    Я защищаюсь от программного обеспечения сетевого мониторинга, если используется HTTPS?

    Какое соглашение об именах пакетов вы используете для личных / хобби проектов на Java?

    Как я могу сделать AllocateHwnd streamобезопасными?

    Использовать reflection для вызова переопределенного базового метода

    Декомпиляция библиотек Objective-C

    Любые инструменты для удаления программного обеспечения, которое невозможно удалить с панели управления

    Cracking truecrypt файлы за считанные минуты? Или просто перекодировать жесткие диски за считанные минуты?

    Создание диаграммы ГАНТ (временная шкала) от времени начала и продолжительности

    атрибут, зависящий от другого поля

    Давайте будем гением компьютера.