PowerShellからのIE操作

使い始めるのにとても苦労したが、PowerShellを使い始めている。Profile.ps1に関数を書いておけばそれを呼び出せるので、自分が使いそうなバッチ処理みたいなのを簡略化させることができる。これを今後はもう少し拡張して色々なことができていくといいかな。


それとは別に、PowerShellからIEを操作できるみたいなので試しているのだが、どうにもこうにもうまくいかない。まずは変数にIEを関連付け

PS C:\Users\krote> $ie = New-Object -com InternetExplorer.Application

この状態で変数"$ie"を表示させると

PS C:\Users\krote> $ie

Application : System.__ComObject
Parent : System.__ComObject
Container :
Document :
TopLevelContainer : True
Type :
Left : -1196
Top : 84
Width : 1182
Height : 909
LocationName :
LocationURL :
Busy : False
Name : Windows Internet Explorer
HWND : 1249416
FullName : C:\Program Files\Internet Explorer\iexplore.exe
Path : C:\Program Files\Internet Explorer\
Visible : False
StatusBar : True
StatusText :
ToolBar : 1
MenuBar : True
FullScreen : False
ReadyState : 0
Offline : False
Silent : False
RegisterAsBrowser : False
RegisterAsDropTarget : True
TheaterMode : False
AddressBar : True
Resizable : True

と、値が入っていることがよくわかる。確かにIEだ。ここから、目的のページへと"Navigate"メソッドを使用して移動させる

PS C:\Users\krote> $ie.Navigate("http://yahoo.co.jp")

そうすると、ここで何故かIEが起動して指定したページへと移動する。"何故か"とわざわざ書いたのは、本来であればここではIEが非表示のままなはずだから。まだVisibleプロパティは変更してない。それにちょっと前に似たようなことをやった時にはVisibleを切り替えないと表示されなかったはずなんだけど・・・。そしてさらにこの状態で変数"$ie"の中身を表示すると

PS C:\Users\krote> $ie

Application :
Parent :
Container :
Document :
TopLevelContainer :
Type :
Left :
Top :
Width :
Height :
LocationName :
LocationURL :
Busy :
Name :
HWND :
FullName :
Path :
Visible :
StatusBar :
StatusText :
ToolBar :
MenuBar :
FullScreen :
ReadyState :
Offline :
Silent :
RegisterAsBrowser :
RegisterAsDropTarget :
TheaterMode :
AddressBar :
Resizable :

という具合に、本来関連付けられていたIEがいなくなって(?)しまっている。この状態で$ieを使ってももちろん起動したIEを操作することはできない。なぜだろうか・・・。私の使い方が間違っているだけなのかな?

と、ここまで書いて"まさか"と思って、PowerShellを管理者権限で立ち上げて同じことをやってみたら予想した通りの結果になった。動作は問題ない。つまり、以前私が試したときは証明書のやり方がよく分かっておらずに毎回管理者権限で起動させていた為に出来ていたことになる。しかし、これはなぜ発生するのだろうか。管理者権限で起動という事を考えるとVistaユーザにだけ影響があるのだろうけど、そうなるとVista上でPowerShellで出来ることはかなり限られてしまうのではないかという不安を覚える。何とかできないものか・・・。