イントラネット上の(おそらく)従来のASPページに移動して、そのサービスの展開プロセスの一部としてサーバーで実行されているWindowsサービスを停止する(新しいファイルを展開した後に再起動する)PowerShellスクリプトがあります。最近IE9にアップグレードするまでは、問題なく動作していました。これがスクリプトです。
# Open service page in IE
$ie = new-object -comobject InternetExplorer.Application
$ie.visible = $true
$ie.navigate($serviceUrl)
while($ie.busy) { start-sleep 1 }
# Stop service
$ie.Document.getElementById("dropDownActionList").value = "Stop"
$ie.Document.getElementById("buttonTakeAction").click()
while($ie.busy) { start-sleep 1 }
スクリプトを実行すると、IEは正常に起動しますが、次のエラーがスローされます。
You cannot call a method on a null-valued expression.
At C:\Projects\ABC\Scripts\Deploy.ps1:85 char:28
+ $ie.Document.getElementById <<<< ("dropDownActionList").value = "Stop"
+ CategoryInfo : InvalidOperation: (getElementById:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
PowerShellで調べてみると、IE ComObjectを作成すると、最初は有効なプロパティがありますが、サービスコントロールページに移動するとすぐに、すべてのプロパティがnullになります(ComObjectがなくなったかのように? )。たとえば、HWND
プロパティが有効な値を持つ前は、現在はnullです($ie.hwnd -eq $null
trueを返します)。ページに移動しても、PowerShellにエラーは表示されません。
同様の 質問をいくつか調べましたが、最初の質問は私の状況と一致せず(Document
私の場合、プロパティはnullです)、後者の質問については、IE9はデフォルトでイントラネットサイトの互換モードになっています。ASPページを保存してw3cバリデーターで実行すると、いくつかのエラーがスローされました(ただし、処理しようとしている要素に関連するものはありません)。残念ながら、私はそれらを修正することはできません。他のサイトではこの問題は発生していないようです。問題が何であるかについての疑念と回避策に関する推奨事項はありますか?