別プロセスの実行 / Invoke-WmiMethod の使い道の例

PowerShell スクリプトの中から別のプロセスを実行するために V1 では次のように書いていました。

$w32c = [WMICLASS]"root\cimv2:Win32_Process"
$proc = $w32c.Create($cmd)

WMIクラスの名前を指定して取得し、そのメソッドを呼び出すという方法です。

V2 CTP3 では Invoke-WmiMethod コマンドレットが増えており、

Invoke-WmiMethod -class win32_process -name create -ArgumentList 'powershell.exe -window minimized'

のように書けます。こちらのほうがわかりやすいですね。root\cimv2 なんて覚えなくて済むにこしたことはないし。

Invoke-WmiMethod にはいろいろオプションがあるので、細かな制御もできそうです。

が、そのあたりはまだ試していないのでまた後日。

コメント

  1. mcmug より:

    追記:
    w32c = [WMICLASS]"Win32_Process"
    でもいいのですね。

    それと Invoke-Method の -Computername オプションで
    他のコンピューター上で WMI クラスのメソッドが呼べるか試してみました。
    たしかにプロセス起動には成功します。

    notepad.exe とか powershell.exe とかをArgumentList に
    単純に指定するとプロセスが起動しているのは確認できるのですが
    当然のことながら、デスクトップにGUIが表示されるわけではなく、
    これだけで面白いわけではありません。。。

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