У меня был сценарий 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")
Одна вещь, которая бросается в глаза, это то, что поскольку вы используете HTTPS, я уверен, что вы, должно быть, получаете ошибки сертификата, поскольку ваш URL - это IP адрес.
Вам нужно сказать Powershell (фреймворк .NET, на самом деле), чтобы он проигнорировал ошибки сертификата. Иначе он обрушится на такие вещи, как Invoke-WebRequest.
Попробуйте следующее:
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Это пользовательский обратный вызов проверки сертификата, который всегда возвращает правду, тем самым эффективно игнорируя проблемы с сертификатами.
Вероятно, это не ответ на вашу проблему, но другой момент заключается в том, что вам не нужно самому строить базовые заголовки аутентификации:
$secPw = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object PSCredential -ArgumentList $username,$secPw
Invoke-RestMethod -Uri $uri -Method Get -Credential $cred
Это особенно полезно, если вы интерактивно запрашиваете учетные данные, потому что вы можете просто использовать Get-Credential
и покончить с этим.