スポンサーリンク

2013年8月27日火曜日

PowerShell スクリプトで DOS コマンドを管理者権限で実行する方法

 とある要望で、route print コマンドで表示されるインターフェースの一覧から特定のインターフェースの番号を取得して、それを route add コマンドと使ってルートを設定したい、というのがあった。
 DOS シェルだとこういうのは無理なのかな?というよりそれらしき情報が見当たらなかったので PowerShell でやることに。
 route print してその出力を受け取って、指定のインタフェースの行を抜き出して番号を取得。ここまではいい。
 それを使って route add するところで問題発生。管理者権限を付与した DOS 窓じゃないとルートが追加されない。
 つまり、PowerShell から発行する DOS コマンドに管理者権限を付与しなければならない。
 PowerShell シェル自体を管理者権限で起動し、そこからスクリプトを実行すればいける(と思う、試してはいない)。
 けど、そんな面倒なことはしたくなくて、クリック操作だけでやりたい。
 いろいろ調べたところ、海外のサイトにそれらしきものを発見。
 やり方は「管理者権限でプロセスを実行する」、まんまだけどまさにこの通り。
 要は、.NET Framework の Process クラスを使えばいい、と。
 ほうほう、こういうやり方もあるのかー、というちょっと目から鱗でした。
 重要なポイントだけ抜き出すと以下のような感じ。
$startinfo = new-object System.Diagnostics.ProcessStartInfo   
$startinfo.FileName = $exe  
$startinfo.Arguments = $arguments  
$startinfo.verb = "RunAs"  
$process = [System.Diagnostics.Process]::Start($startinfo)  
ただ、どうしても管理者権限で実行しますけどいいですか?的なダイアログは出ちゃう、仕方ないね。

0 件のコメント:

コメントを投稿