我正在尝试编写一个PowerShell函数以在网页上执行JavaScript / jQuery,并使用以下技巧将结果返回给PowerShell:我们使用setAttribute将JavaScript返回值存储在DOM中,然后使用。但是,以下问题使我困扰了几天。请参阅下面的评论:Function ExecJavaScript($ie, $jsCommand, [switch]$global){ if (!$global) { $jsCommand = "document.body.setAttribute('PSResult', (function(){$jsCommand})());" } $document = $ie.document $window = $document.parentWindow $window.execScript($jsCommand, 'javascript') if (!$global) { $psresult = $document.body.getAttribute('PSResult') # Why no matter what I do, this always returns an array instead of a String? return $psresult.ToString() #return @($psresult) #return @($psresult).ToString() #return ($psresult | select -First 1) #return ($psresult -join '') }}$ie = New-Object -COM InternetExplorer.Application -Property @{ Navigate = "https://www.google.com/" Visible = $true}do { Start-Sleep -m 100 } while ( $ie.busy )$result = ExecJavaScript $ie @' return "JavaScript code ran successfully!";'@# Why $result.length is always 2 ?!!$result.length$result谢谢! (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 本质上,返回null与返回null不同。 execScript方法返回null,这实际上是传递到管道的对象。我希望下面的代码片段可以说明您遇到的行为。Function ReturnNull () { 0..1 | % { $null }}Function ReturnToNull() { 0..1 | % { $null | Out-Null }}# This will return 2.(ReturnNull).length# This will return 0 as it has been spit out to Null.(ReturnToNull).length您的功能基本上是ReturnNull,并且在添加ReturnToNull cmdlet时更改为Out-Null。 (adsbygoogle = window.adsbygoogle || []).push({});
10-07 22:01