【发布时间】:2017-04-16 07:49:55
【问题描述】:
我一直在使用一个已经运行了一年而没有问题的脚本,向安全 (https) 站点调用 Invoke-RestMethod,但现在失败了。经过大量测试后,我发现对于任何安全站点请求,我可以使调用始终失败并且可重现,但我不知道为什么。以下代码失败。
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Invoke-RestMethod -Uri https://blogs.msdn.com/powershell/rss.aspx | Format-Table -Property Title, pubDate
产生的错误如下:
Invoke-RestMethod:底层连接已关闭:发送时发生意外错误。 在行:1 字符:1 + 调用-RestMethod -Uri https://blogs.msdn.com/powershell/rss.aspx |格式表... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
我发现如果我包含
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
上面的行,我得到了前面显示的错误。上述行为和错误实际上与应该发生的情况相反。以前,如果不将 ServerCertificateValidationCallback 分配为 true,我就无法发出 https 请求。
我已经在多台计算机上尝试过这个,在不同的 Windows 用户配置文件下,使用管理权限启动 PowerShell,但我发现添加上面的行可以让我重现问题。为了使其工作,我必须关闭 PowerShell,重新打开它并删除 ServerCertificateValidationCallback 行。如果我将该行添加到代码中,则会返回错误。
我最后一次运行我的代码是在两周前,所以我能确定的时间范围很窄。关于为什么现在失败的任何想法?
请注意,这不是我最初遇到问题的网站,但是,我遇到的问题可以用上面的代码重现。
【问题讨论】:
标签: rest powershell