PowerShellでブラウザを最前面に出してリロード(F5)する【IE、Edge】

コマンドプロンプト

Powershellで「Microsoft Edgeを最前面に出してリロード」させるスクリプトを作りました。

ソース

 
add-type -AssemblyName microsoft.VisualBasic
add-type -AssemblyName System.Windows.Forms
$isok = $false;

$i = 0; #無限ループ脱出用
$matchflg = $false; #目的のウィンドウが見つかった時に倒すフラグ

$MaxLoop = 30; #ループする最大回数

while($isok -eq $false) {
    # msedgeのプロセスを取得
    $ps = Get-Process | Where-Object {$_.Name -eq "msedge"}

    foreach($process in $ps){
        # MainWindowTitleが空でないもの
        if($process.MainWindowTitle -ne "") {
            # プロセスをアクティブにする 
            [Microsoft.VisualBasic.Interaction]::AppActivate($process.ID);

            # MainWindowTitleが期待しているものか確認
            if($process.MainWindowTitle -match "あいうえお - Wikipedia") {
                # マッチしていればループを抜ける
                $matchflg = $true;
                $isok = $true;
            } else {
                # マッチしていなければShift+Alt+TABを送る
                [System.Windows.Forms.SendKeys]::SendWait("+(%({TAB}))");
                $i = $i + 1;
                # 処理を待つ
                Start-Sleep -m 200

                #目的のウィンドウが無さそうならループを抜ける(無限ループ回避)
                if($i -gt $MaxLoop){
                    $isok = $true;
                }
            }
        }
    }
}

if($matchflg -eq $true){
    [System.Windows.Forms.SendKeys]::SendWait("{f5}");
}

「”任意のファイル名”.ps1」を新規作成し、上記コードをコピペして実行すればとりあえずは動くと思います。

動かなかったら端末環境の違いかも。

やっていることとしては、

①目的のタイトルのMicrosoftEdgeのウィンドウが見つかるまで[Shift+Alt+Tab]キーを送る、②[F5]キーを送ってブラウザをリロード

といった感じ。

複数のMicrosoftEdgeウィンドウが立ち上がっている場合を想定しています。

 

以下の値は任意で変更して使用します。

$MaxLoop = 30; #ループする最大回数

無限ループ回避用の変数です。開いているウィンドウの総数以上の値を指定します。

 

$ps = Get-Process | Where-Object {$_.Name -eq "msedge"}

リロードしたいウィンドウはEdgeなので、ここで”msedge”を指定しています。(リロードしたいウィンドウがIEの場合は”iexplorer”と記述します。)

蛇足かもしれませんが、[Windows+R]キーを押して「ファイル名を指定して実行」から”msedge”と入力すると、Edgeで新規ウィンドウが立ち上がります。

 

if($process.MainWindowTitle -match "あいうえお - Wikipedia")

目的のウィンドウのタイトルを指定します。

Edgeの場合は、[F12]キーで開発者ツールを開いて、<title>属性からコピーできます。

タイトルとURLをコピーしました