У меня был сценарий Powershell, который использовал Invoke-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 framework) игнорировать ошибки сертификата. В противном случае он откажется от таких вещей, как 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
и покончить с этим.