用于Citrix NetScaler的Powershell和NITRO API在GET方法上出错

时间:2015-05-13 08:37:02

标签: rest powershell citrix netscaler

我使用Citrix提供的PowerShell模块来调用Nitro REST API。调用该函数我可以成功地从加载中添加和删除负载均衡服务。但是,当我尝试使用GET方法获取服务状态时,我收到错误:

  

Invoke-RestMethod:底层连接已关闭:发送时发生意外错误。

我试过在不使用模块的情况下运行Invoke-RestMethod但是得到了同样的错误

Invoke-RestMethod -WebSession $myNSSession.WebSession -Method GET -Uri https://<NetScaler IP/nitro/v1/config/service/<Service Name>

当谷歌搜索此错误时,一切似乎都指向证书问题。我最初甚至在POST方法上都有这个,直到我将下面的内容添加到我的脚本

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

因此,因为这适用于POST,我无法理解为什么它不适合GET !!

另一个奇怪的事情是,如果我将URL直接放入浏览器然后输入我的凭据我会在原始文本中得到回复!所以看起来这是我在PowerShell而不是NetScaler或NITRO API中调用它的方式的问题!

有人请帮忙,因为这让我发疯了!

2 个答案:

答案 0 :(得分:0)

我很同意我是Invoke-RestMethod命令的新手,但试试这个:

$creds = Get-Credential

$service = Invoke-RestMethod -Uri https://<NetScaler IP/nitro/v1/config/service/<Service Name> -Credential $creds

你会得到类似的东西:

*errorcode* *message*       *serverity*           *service*
*        0   Done            NONE                  {@{name=<service name; n..

然后键入$ service.service,您将看到更多信息。将列出任何可用的属性。然后按照模式:      $ service.service。

答案 1 :(得分:0)

我在使用Nitro API(特别是v10.5)时遇到了同样的问题,发现设置证书策略,TLS版本和信任设置无效。 POST有效,GET失败。

对我来说,解决方案是不使用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()

希望有帮助。