Powershell调用webrequest不起作用

Posted

技术标签:

【中文标题】Powershell调用webrequest不起作用【英文标题】:Powershell invoke-webrequest not working 【发布时间】:2018-10-19 21:36:06 【问题描述】:

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

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

我已将其缩小到一行,

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

无论出于何种原因,使用此帐户时,Invoke-WebRequest 似乎都不起作用。运行该行时,它不会产生任何东西,不会产生错误、警告或输出。 $uri$body 变量也已定义。

即使我使用本地管理员 PRTG 帐户登录到探测服务器并以另一个用户身份运行 Powershell(使用我自己的凭据),它仍然无法生成任何内容。

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

【问题讨论】:

是的!那行得通。太感谢了。在过去的几天里,这一直在杀死我。 【参考方案1】:

[把我的评论变成答案]

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

这个开关:

Invoke-WebRequest -UseBasicParsing ....

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

权衡是您可以使用纯文本结果,并且无法通过 html DOM、getElementByTagName() 或任何需要实时浏览器引擎才能工作的东西访问页面。

【讨论】:

谢谢。终于弄清楚了为什么在运行相同脚本的客户端确实工作时某些后台作业不起作用。拯救了我的周末(y) 仍然失败,我得到Invoke-WebRequest : Die Verbindung mit dem Remoteserver kann nicht hergestellt werden 我在端口 3000 上运行一个网络服务器并输入:Invoke-WebRequest -Uri http://localhost:3000 -UseBasicParsing。我从上面得到了错误。但是,Invoke-WebRequest -Uri http://test.de 有效。 @Timo 你在做不同的事情,得到不同的错误,这个问题是 2 年前的。可能不是解决问题的正确位置。我可以在一个窗口中从 nmap 项目中运行NetCat,使用ncat -l -p 3000 像网络服务器一样侦听端口3000,并在另一个窗口中运行invoke-webrequest -uri http://localhost:3000 -UseBasicParsing 进行连接,连接正常,netcat 窗口获取HTTP 请求标头.我猜你有本地防火墙,或者网络服务器未配置为允许连接。 @Timo 哦,很好的发现!我没有专门用于 PowerShell 的 ncat,它只是 nmap 的标准 Windows 下载。您可以打开一个套接字并在 PowerShell/.Net 中侦听 but it's not trivial to type at a command line

以上是关于Powershell调用webrequest不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在powershell中使用Invoke-WebRequest重定向URL时如何获取位置标头

powershell中调用 curl 的正确方法

powershell équivalentdeinvoke-webrequest pour powershell V2。

批量隐藏 Invoke-WebRequest

powershell 使用Invoke-WebRequest下载文件

从 powershell 下载文件时,Invoke-WebRequest 进度变得无响应/暂停