我想在计划任务中将 Invoke-WebRequest 作为系统运行。
cmdlet 失败并出现以下错误:
Invoke-WebRequest : 无法解析响应内容,因为 Internet Explorer 引擎不可用,或 Internet Explorer 的 首次启动配置不完整。指定 使用 BasicParsing 参数并重试。
我不想使用 UseBasicParsing,因为我需要响应中的 ParsedHtml 对象。我怎样才能使这项工作?
我想除了使用
-UseBasicParsing
之外没有其他解决方法 - 您可以使用 .RawContent
属性访问 HTML。
作为替代方案,创建一个服务用户,登录一次并配置 IE,然后使用该用户执行您的计划任务。
我知道这是一个老问题,但它在谷歌结果中排在首位,所以我认为这对其他人回答这个问题会有帮助。 我们解决此问题的方法是使用 psexec 运行 iexplore.exe 并单击 IE 首次运行对话框。
./psexec.exe -sid "$Env:ProgramFiles\Internet Explorer\iexplore.exe"
现在您可以从作为本地系统帐户运行的计划任务中使用 Invoke-WebRequest。
问题是浏览器正在等待人来运行初始配置向导。您可以运行以下 Powershell 以添加注册表项以禁止等待该向导运行。
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 1
Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Internet Explorer\Main" -Name "DisableFirstRunCustomize" -Value 1
不确定为什么你会运行任何连接到 Internet 的系统作为系统。你真的应该作为一个较低特权的帐户运行。也就是说,MrRat 的解决方案是在服务帐户上下文中运行脚本时的简单解决方案。在开发时,PoweShell 脚本作为没有特殊本地权限的开发人员交互工作良好,但在作为 gMSA 运行时失败。撕破异常,我发现了这个:
System.NotSupportedException:
Data: System.Collections.ListDictionaryInternal Source: Microsoft.PowerShell.Commands.Utility
StackTrace: at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.VerifyInternetExplorerAvailable(Boolean checkComObject)
at Microsoft.PowerShell.Commands.InvokeWebRequestCommand.ProcessResponse(WebResponse response)
at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
正是
VerifyInternetExplorerAvailable(Boolean checkComObject)
这篇文章最终让我来到这里寻找解决方案。