2017年1月20日金曜日

PowerShell IE保護モード

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の属性が変更されて、サーバー側のモードを変える必要があった。


本日の河上選手:お休み