Powershell invoke-webrequest 不工作

Powershell invoke-webrequest not working

我有一个 Powershell 脚本,它应该 运行 一个 Invoke-WebRequest 一个站点。我想将此脚本与 PRTG 网络监视器一起使用,以确保网络服务器已启动并且 运行 正确连接。

目前,该脚本 运行 在我的本地计算机上运行,​​运行 我在探测服务器上的域凭据。但是,当使用 PRTG 使用的本地管理员凭据登录时,它不会 运行。

我已经将它缩小到一行,

Invoke-WebRequest $uri -Method POST -Body $body -TimeoutSec 10

看来无论出于何种原因,在使用此帐户时,Invoke-WebRequest 将无法使用。当 运行ning 该行时,它不会产生任何东西,没有错误、警告或输出。 $uri$body 变量也已定义。

即使我使用本地管理员 PRTG 帐户和 运行 Powershell 作为另一个用户(使用我自己的凭据)登录到探测服务器,它仍然无法产生任何东西。

为什么本地管理员帐户无法 运行 Invoke-WebRequest?这发生在 PSVersion 4.0 的 Windows Server 2012R2 上。

[将我的评论变成答案]

在 Windows PowerShell 中,Invoke-WebRequest 使用 Internet Explorer 引擎解析网站,除非您告诉它不要这样做。 IE 有很多限制 - 来自其受信任 Sites/security 区域的安全模型、IE 增强安全性、组策略覆盖,也许更多,看起来您已经尝试了所有其他合理的方法,值得一试直接测试。

这个开关:

Invoke-WebRequest -UseBasicParsing ....

避开 IE 引擎并发出 HTTP 请求并在 C#/.Net 中处理响应。

权衡是您得到的是纯文本结果,无法通过 HTML DOM、getElementByTagName() 或任何需要实时浏览器引擎工作。

在我们的案例中,发现 Internet Explorer 中有一个代理设置(Powershell 默认使用),但我们无法清除它,因为它是公司的笔记本电脑,所以我们必须先 disable 组策略,然后在 Internet Explorer 中将其清除。打开 gpedit.msc 然后到这里 Computer Configuration -> Administrative Template -> Windows Components -> Internet Explorer -> Prevent Changing proxy settings 然后禁用它。