我有一个使用 Invoke-RestMethod 的 Powershell 脚本,该脚本在 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 之类的东西上搞砸。
尝试这个:
这是一个自定义证书验证回调,始终返回 true,从而有效地忽略了证书问题。
可能不是您的问题的答案,但另一点是您不必自己构建基本的身份验证标头:
如果您以交互方式提示输入凭据,则它特别有用,因为您可以使用
Get-Credential
并完成它。