PowerShellでUWSCのGetActiveOleObj的なことしたい

すでに動いてるIEをPowerShellでちょっとどうこうしたかったりとかそういうあれですね

ちょっとぐぐったら[System.Runtime.InteropServices.Marshal]::GetActiveObject()で良さそうな雰囲気だったんですけど、肝心なIEでエラー(MK_E_UNAVAILABLE)になるのです
なんかIEはROT(Running object table)とかいうのに登録されてないんだそうで、そのせいらしいよ
ROTとか初めて聞いた、はわわ
で、困ってググってたらなんてことない解決策が出てきたのでなんとかなったぞ

function Get-ComObject 
{
    [CmdletBinding()]
    param
    (
        [parameter(Mandatory,Position=0)]
        [string] $ProgId
    )

    switch ($ProgId)
    {
        'InternetExplorer.Application'
        {
            $shell = New-Object -ComObject Shell.Application
            return $shell.Windows() | ? {$_.name -eq 'Internet Explorer'}
        }
        default
        {
            return [System.Runtime.InteropServices.Marshal]::GetActiveObject($ProgId)
        }
    }
}

はい
Shell.Applicationちゃんがいてくれて助かったよ!
UWSCでもよくやってたというのにまぁ全然気付かなかったね、うかつ
あれでもnameで比較だとIEのバージョンで名前変わるんだっけ?忘れた
Marshal.GetActiveObjectの方はちゃんと動くのか試してないけど、当面用があるのIEだけだしまぁいいよね、いいよ

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中