Вызовите-Restmethod сценарий повреждений в PS 4.0

У меня был сценарий Powershell, который использовал, Вызывают-RestMethod, который работал в powershell 3.0. Однако я обновил до powershell 4.0 для исправления ошибки в powershell 3. Когда я сделал так, мой сценарий, кажется, прекратил работать.

$username = "Administrator" $password = "PASSWORD" $uri = "https://10.0.0.18/vmrest/users" $dictionary = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f$username,$password))) $dictionary.Add("Authorization",$base64AuthInfo) Invoke-RestMethod -Uri $uri -Method GET -Headers $dictionary -Verbose

Когда я включаю подробный переключатель, он дает мне этот ответ

VERBOSE: GET https://192.168.1.18/vmrest/users with 0-byte payload VERBOSE: received -1-byte response of content type

Я также пытался указать требуемый тип контента, но провал $dictionary.Add("Accept","application/json") $dictionary.Add("Connection", "keep_alive")

6
задан 12 August 2014 в 02:02
2 ответа

Одна вещь, которая бросается в глаза, это то, что поскольку вы используете HTTPS, я уверен, что вы, должно быть, получаете ошибки сертификата, поскольку ваш URL - это IP адрес.

Вам нужно сказать Powershell (фреймворк .NET, на самом деле), чтобы он проигнорировал ошибки сертификата. Иначе он обрушится на такие вещи, как Invoke-WebRequest.

Попробуйте следующее:

[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Это пользовательский обратный вызов проверки сертификата, который всегда возвращает правду, тем самым эффективно игнорируя проблемы с сертификатами.

9
ответ дан 3 December 2019 в 00:15

Вероятно, это не ответ на вашу проблему, но другой момент заключается в том, что вам не нужно самому строить базовые заголовки аутентификации:

$secPw = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object PSCredential -ArgumentList $username,$secPw

Invoke-RestMethod -Uri $uri -Method Get -Credential $cred

Это особенно полезно, если вы интерактивно запрашиваете учетные данные, потому что вы можете просто использовать Get-Credential и покончить с этим.

.
1
ответ дан 3 December 2019 в 00:15

Теги

Похожие вопросы