如果Internet Explorer不可用,Invoke-WebRequest
cmdlet可能会失败 *:
The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.
如果我在一台运行Internet Explorer的计算机上,则不需要-UseBasicParsing
。我想测试我的脚本是否可以在未运行IE或已卸载IE的计算机上运行。在我的测试环境中,如何故意创建会发生上述错误的条件?
- PowerShell 6.0.0之前。
1条答案
按热度按时间e5nszbig1#
如果我使用的计算机上有正常运行的Internet Explorer,则不需要
-UseBasicParsing
。即使它不是 * 必需的 * 以避免错误,你也应该使用这个开关,* 除非 * 你真的需要将响应解析成DOM,可以通过
.ParsedHTML
属性访问。-UseBasicParsing
可以防止这种不必要的解析带来的开销。因此,如果您不需要Internet Explorer中介的DOM解析, 总是 * 使用
-UseBasicParsing
很好,甚至可以在 * 跨版本 * 场景中工作*:虽然
-UseBasicParsing
在PowerShell (Core)(v6+)中是“永远不需要的”--在这里解析到DOM甚至是“不可用的”--但您仍然可以在那里使用它,而不会产生不良影响。如果你不想把
-UseBasicParsing
开关传递给 * 每一个调用 ,你可以通过$PSDefaultParameterValues
首选项变量**预置 *-UseBasicParsing
* 会话范围 *:如果您想将此预设 * 作用于 * 给定脚本*(以及从中调用的脚本/函数),请使用this answer中所示的技术。
我怎样才能故意创造条件,使上述错误发生呢?
如果你想**对你的代码运行测试,模拟 * 错误情况,以确保你所有的代码都使用
-UseBasicParsing
:Install-Module -Scope CurrentUser Pester
。Pester是PowerShell广泛使用的测试框架。Invoke-WebRequest
或Invoke-RestMethod
调用 * 没有 *-UseBasicParsing
。下面是一个 * 简单 * 的例子(保存到
EnforceBasicParsing.Tests.ps1
,然后用.\EnforceBasicParsing.Tests.ps1
调用):前两个测试成功了,而第三个测试被故意设置为失败,这显示了如果测试在不使用
-UseBasicParsing
的真实的代码上运行会发生什么。参见:Pester documentation。