PowerShellで、IEの自動実行をしていたら、エラーが出た。
ソース
$ie=new-object -com InternetExplorer.Application
・
$ie.visible=$true
$ie.Navigate(url)
・
Write-debug $ie.readyState
エラーメッセージ
Write-debug $ie.readyState
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Write-Debug]、
ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,
Microsoft.PowerShell.Commands.WriteDebugCommand
昨日 WindowsUpdate をしたのでその影響かもしれないが、IEのセキュリティーで「保護モード」がOFFになっていた。
以前も同じ現象が起きて、保護モードをONにしたら正常に動くようになった。
原因を調べたので備忘録
保護モードのON・OFFによって、IEのCreateObjectのパラメーターが変わる。
保護モード ON
$ie=new-object -com InternetExplorer.Application
保護モード OFF
$ie=new-object -com InternetExplorer.ApplicationMedium
整合性レベルの問題で、保護モードON時は、整合性レベルが「低(Low)」、OFFの時には、「中(Midium)」になっている。
IEデフォルトは整合性レベル「低(Low)」なので、保護モードOFFの「中(Midium)」でアクセスエラーとなる。
つまり、「$ie=new-object -com
InternetExplorer.Application」では、整合性レベルが「低(Low)」で、IEを生成する。
IEが、保護モードOFFの「中(Midium)」になっていると、LowのプロセスでIEの操作を行えば、当然エラーとなるということ。
それにしても、UPDATEで勝手にモード変更とかをしてほしくない。
前回のUPDATEの時も実行後、Hyper-Vサーバーにアクセスできなくなった。
この問題と同様で、WinRMの属性が変更されて、サーバー側のモードを変える必要があった。
本日の河上選手:お休み