#概要
POWERSHELLを使って、IEで特定のサイトに自動ログイン→HTMLソースを取得してクリップボードにコピーしていたのですが、WINDOWS7からWINDOWS10にアップデートした際に、動作しなくなったため対応方法の覚書です。
IEのCOMがアクセス不可
以下、IEオブジェクトを開くためのサンプル
objShell=new-object -com Shell.Application
$ie=new-object -com InternetExplorer.Application
$ie.navigate("開きたいURL")
この2行目部分でInternetExplorer.Applicationが開けないと
エラーが発生するようになり、スクリプトが動作しなくなりました。
###対応
古い.NETのランタイムを削除することでOK。
WINDOWS7時代に使用していた.net 3.5系のランタイムをプログラム一覧から削除後、エラーが出なくなりました。
HTMLソースを取得→クリップコピーした際、文字化けする
既存環境では、WIN7に標準ではいっていた、POWERSHELL 2.0を使っていました。WINDOWS10に変わった際に、POWERSHELLが5になった影響か、クリップボードに日本語をコピーした場合に文字化けが発生するようになりました。
以下、文字化けが発生したスクリプトサンプル
(開いているIEの画面からHTMLソースをクリップボードコピーする)
$ie = $objShell.Windows() |
? {$_.Name -eq "Internet Explorer"} |
Select-Object -First 1
$html = $ie.Document.Body.InnerHTML
$html|CLIP
###対応
上記コードの上に以下を追記したら文字化けはなくなりました。
[Console]::OutputEncoding = [Text.Encoding]::Default
IEを開くのに時間がかかる
WIN7で実行していたころより、IEが開くのに時間がかかるようになりました。
私の環境では、スクリプトを呼び出して5秒くらいしないとIEが起動しない状態になっています。
objShell=new-object -com Shell.Application
$ie=new-object -com InternetExplorer.Application
$ie.navigate("開きたいURL")
・
・
・
後続処理
・
・
・
###対応
$ie.navigateの処理後にIEのBUSYチェック処理を追加
画面が開ききるまでWAITするようになります。
while($ie.Busy){
start-sleep -milliseconds 500
}
IEを起動したときに正常に起動せず、ゾンビ化する頻度が多くなった
IEをスクリプトから起動した際、画面が立ち上がらず、プロセスのみ起動するいわゆるゾンビプロセスが発生しやすくなった。
この状態になると次回の起動が正常に実施できなくなります。
###対応
私の環境では他を開く必要がないため、起動プロセスの前に強制的にIEをクローズするようにした。
$ps = Get-Process | Where-Object {$_.Name -eq "iexplore"}
#開いているIEがいたら閉じる
if($ps -ne $null)
{
Stop-Process -name iexplore
}
#最後に
OSのアップデートにより、思ったよりいろいろと対応が必要になってしまいました。
根本的な対応が取れていないものもあるため、改定していけたらと思います。
記事を追記しました。
WINDOWS7からWINDOWS10にアップデートした際にpowershellでDOM操作ができなくなった話
https://qiita.com/kk-ster/items/d8a993c5f6015aff809e