Powershell 3.0で動作するInvoke-RestMethodを使用するPowershellスクリプトがありました。しかし、Powershell 3のバグを修正するためにPowershell 4.0にアップグレードしました。そうしたところ、スクリプトが機能しなくなったようです。
$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}
これは、常にtrueを返すカスタム証明書検証コールバックであり、証明書の問題を効果的に無視します。
おそらくあなたの問題に対する答えではありませんが、もう1つのポイントは、基本認証ヘッダーを自分で作成する必要がないことです。
$secPw = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object PSCredential -ArgumentList $username,$secPw
Invoke-RestMethod -Uri $uri -Method Get -Credential $cred
Get-Credential
そしてそれで終わります。