我正在使用Citrix提供的PowerShell模块来调用Nitro。调用我可以成功地从加载中添加和删除负载平衡服务的函数。然而,当我尝试执行GET方法来获取服务的状态时,我得到了错误:
Invoke-RestMethod :基础连接已关闭:发送时发生了意外错误。
我尝试过在不使用模块的情况下运行调用-RestMethod,但是得到了相同的错误。
Invoke-RestMethod -WebSession $myNSSession.WebSession -Method GET -Uri https://<NetScaler IP/nitro/v1/config/service/<Service Name>在googling这个错误时,一切似乎都指向了证书问题。我一开始甚至在POST方法上也有这种情况,直到我将下面的内容添加到我的脚本中
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}所以,既然这是做文章的工作,我不明白为什么它不会得到!!
另一件奇怪的事情是,如果我将URL直接放到浏览器中,然后输入我的凭证,我就会得到一个原始文本的响应!所以看起来这是我在PowerShell中调用它的方式的一个问题,而不是NetScaler或NITRO!
有人帮我,因为这让我快疯了!!
发布于 2018-09-19 08:48:31
我对Nitro API (特别是v10.5)也有同样的问题,并且发现设置证书策略、TLS版本和信任设置没有任何影响。发帖成功了,失败了。
对我来说,解决方案是不使用cmdlet,而是返回到本机.Net方法。下面我仍然使用带有内部证书的HTTPS,因此仍然设置回调。
$NSProtocol = "https://"
$NSHostname = "netscaler"
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$WebRequest = [System.Net.WebRequest]::Create("$NsProtocol$NsHostname/nitro/v1/config/hanode")
$WebRequest.Method = "GET"
$WebRequest.ContentType = "application/json; charset=utf-8";
$WebRequest.Headers.Add("AUTHORIZATION","Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($nsuser+":"+$nspass)))")
$Response = $WebRequest.GetResponse()
$ReadStream = New-Object System.IO.StreamReader $Response.GetResponseStream()
$HaState = ConvertFrom-Json $ReadStream.ReadToEnd()希望这能有所帮助。
https://stackoverflow.com/questions/30209695
复制相似问题