我正试图绕过invoke-webrequest
倾向于挂起记忆并杀死我的整个剧本。到目前为止,我已经使用get-job
编写了一个脚本块,它从foreach
:
start-job -scriptblock {invoke-webrequest $using:varSiteVariable} -name jobTitle | out-null
我等待10秒,然后使用receive-job
将最近作业的输出捕获到一个变量中,然后我想以与我使用{{{I}时相同的方式解析为PowerShell HtmlWebResponseObject 1}}直接。这背后的逻辑是,如果没有要解析的内容,我将抛出脚本执行并返回到第一个,因为invoke-webrequest
已经明显崩溃了。
但是,当我将数据从invoke-webrequest
提取到变量时,它始终为jobTitle
类型,这意味着它缺少我用来执行所有操作的关键PsObject
方法进一步解析HTML代码;该方法似乎特别属于ParsedHtml
类型的对象。似乎没有办法让我发现将对象强制转换为此类型,也没有任何方法可以在类型之后将其转换为另一种。
我不能简单地在作业中定义变量,然后在作业之外引用它,因为这两个命令发生在不同的上下文中并且不共享任何工作空间。我无法将数据写入文件,因为我无法将其作为我需要执行的处理的正确数据类型重新导入。
有谁知道我如何将HtmlWebResponseObject
数据转换为PsObject
数据?
答案 0 :(得分:0)
我最终在本文的帮助下解决了这个问题: https://gallery.technet.microsoft.com/Powershell-Tip-Parsing-49eb8810
我无法将数据重新转换为HtmlWebResponseObject,但我能够创建一个HTMLFile类型的新COM对象,并将从我的作业中获取的变量中的数据写入其中。该脚本需要稍微重写,但我用来解析数据的所有重要方法都像以前一样工作。