cheshire-boy

システム・サービス

【Start-Process】PowerShellから管理者として実行させるテクニック

投稿日:2017年1月18日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell から管理者権限でプロセスを起動する方法】

についてご紹介します。

Start-Process コマンドレットで「管理者として実行」したい場合は"管理者"と"管理者権限"の2つを指定しなければなりません。

管理者として実行する場合だけでなく特定のユーザで実行させたい場合にも応用できます。

別プロセスを起動する基本的な方法についてはこちら↓の記事をご参考ください。

 

スポンサーリンク

実行時のユーザを指定する

プロセスを開始するコマンドレット

Start-Process

の使い方は以下をご覧ください。

【コマンドレット】

Start-Process

【オプション】

パターン1
-FilePath <実行ファイルパス>
-ArgumentList <開始プロセスの引数>
-Credential <ユーザ情報>
-WorkingDirectory <string>
-LoadUserProfile
-NoNewWindow
-PassThru
-RedirectStandardError <プロセス上のエラー出力先>
-RedirectStandardInput <プロセスへの入力ファイル>
-RedirectStandardOutput <プロセスからの出力ファイル>
-WindowStyle <ウィンドウの状態>
-Wait
-UseNewEnvironment

パターン2
-FilePath <実行ファイルパス>
-ArgumentList <開始プロセスの引数>
-WorkingDirectory <プロセスの実行場所>
-PassThru
-Verb <プロセス開始時の動作>
-WindowStyle <ウィンドウの状態>
-Wait

【入力】

None

【出力】

None
System.Diagnostics.Process

【エイリアス】

saps
start

プロセスとは何か」については「プロセスとは...」をご覧下さい。

デフォルトでは操作中のユーザで実行される

Start-Process コマンドレットで実行される新しいプロセスは基本的に操作中のユーザ情報で実行されます。

下の実行結果を見てください。

Get-Process "-IncludeUserName" オプションを使用することでプロセスの実行ユーザを表示させることができます。

実行結果を見てみると操作中のユーザ(cheshire-boy)と起動したプロセスのユーザ (cheshire-boy) 同じであることがわかりますね。

このように Start-Process コマンドレットのデフォルトではプロセス開始時のユーザ情報は操作中のユーザが使用されます。

"Credential" オプションで別の資格情報を指定する

では、他のユーザ情報で実行...つまり別の資格情報を使用してプロセスを開始するにはどうするのでしょうか。

資格情報 … ユーザのユーザ名パスワード

ちなみに「他のユーザで実行する」とは、

ユーザAでログインしながらユーザBとして操作する

というような状態を表します。

Start-Process コマンドレットには "-Credential" オプションが用意されています。直訳で 「Credential ⇒ 資格 」なのでそのままですね。

Credential オプションで実行時に使用したい他のユーザの

  • ユーザ
  • パスワード

を入力することで「別ユーザとして実行」することができます。

使い方は

Start-Process <実行ファイル> -Credential ユーザ名

です。

使用方法に合わせて以下のコマンドレットを実行してみましょう。

実際に実行してみると↓のように資格情報を入力するウィンドウが表示されます。

資格情報入力欄-チェシャわら
資格情報入力欄-チェシャわら

この画面で正しいパスワードを入力し認証に成功すると指定したユーザでプロセスが開始されます。

上記コマンドレットの場合であれば「別のユーザ Hoge」で新たに PowerShell を立ち上げることができるはずです。

この時のコマンドレットを実行した側のPowerShell画面からは、

このように Hoge ユーザで PowerShell が開始されたことを確認できます。

ちなみに新しく立ち上がった Hoge ユーザの Poweshell で自分の名前を確認してみると Hoge であることがわかります。

このように Start-Process コマンドレットでは "Cridental" オプションを使うことで他のユーザとしてプロセスを起動することができます。

"Verb" オプションとは...

突然ですが、ここで "Verb" オプションの説明に入ります。

通常の英単語【Verb】とは日本語で「動詞」の事を表しますが PowerShell の場合は

ユーザが行う操作やアクション

の事を指します。

【ユーザ操作の例】

・ファイルを開く
プリントアウトする
・クリックして実行する
・アプリケーションを起動する
・音楽を再生する
・動画を再生する   ... etc.

このようにユーザが行う操作は様々ですが基本的にファイルの種類毎に「何ができるか・どんな操作が可能か」が決まっています。

テキストファイル ⇒ 印刷する、編集する
実行ファイル   ⇒ 実行する、管理者として実行する、開く
音楽ファイル   ⇒ 再生する、キューに入れる

これをもう少しシステム的に言い換えるとファイルの操作はファイルの拡張子(.exe .txt .mp3 .ps1)単位に決められています。

テキストファイル = .txt  ⇒ 印刷する、編集する
実行ファイル   = .exe   ⇒ 実行する、管理者として実行する、開く
音楽ファイル   = .mp3 ⇒ 再生する、キューに入れる

何となく想像はつきましたか?

"Verb" オプションで起動時の動作を指定する

Verb” とは ”ユーザが行う操作” であると説明しました。

その名の通り Start-Process コマンドレットで ”-Verb” オプションを使用することで、「プロセス開始時の動作」を指定してあげることが可能です。

Start-Process
AAA.txt を メモ帳 で 開く
BBB.txt を メモ帳 で 印刷する

のように赤字の部分を指定できます。

使い方は、

Start-Process <対象> -Verb <動作・操作>

です。

するとチェシャ男の環境では下の画像のように XPS ファイルに出力しようとするウィンドウが立ち上がってきました。

verb指定-チェシャわら
verb指定-チェシャわら

今まではメモ帳画面でテキストファイルが開かれていたので ”Verb” オプションで確かに動作が指定されていますね。

そもそも何の操作ができるわからない! _(:3 」∠)_

という場合には「System.Diagnostics.ProcessStartInfo」クラスを参照することで確認できます。

(New-Object System.Diagnostics.ProcessStartInfo <拡張子>).Verbs

と実行することで ”Verb” で指定可能な動作・操作を調べることができます。

ここからは実行ファイルの動作 (Verb) に焦点を当てて

open
runas
runasuser

について話していきます。

"Verb" オプションの「runAs」で管理者として実行

”Verb” オプションで実行ファイルに指定ができる操作を調べてみると、

の3つがあることがわかりました。

それぞれ

open    => 通常実行
runas   => 管理者権限で実行
runasuser => 別のユーザとして実行

という意味です。

「通常実行」は説明しなくても問題ないと思います。

「別のユーザとして実行」はこの記事の前半で説明した内容とほぼ同じです。

「管理者権限で実行」というのは右クリックメニューに出てくるメニューの

右クリックメニュー-チェシャわら
右クリックメニュー-チェシャわら

「管理者として実行(A)」と同じ動作です。

つまり今まで

[実行ファイル]-[右クリック]-[管理者として実行]

としていた動作を Start-Process コマンドレットから

Start-Process <実行ファイル> -Verb ranAs

ので1行で実行することができます。実際に実行すると

このように管理者権限を持った PowerShell が起動してきます。

管理者権限として起動-チェシャわら
管理者権限として起動-チェシャわら

※UAC(ユーザアカウント制御)が有効な場合はポップアップが表示されます

 "Credential" と "Verb" オプションの共存

ここまで「別のユーザとして実行する」方法や「管理者として実行する」方法を紹介してきましたが、

他の管理者ユーザとして管理権限で実行したい

という場合はどうすればよいでしょうか。

単純に "Credential" と "Verb" オプションの両方を指定して実行してみると、

このようにエラーになってしまいます。

冒頭のコマンドレットの使い方パターンにも書いているように "Credential" と "Verb" オプションは使用する構文パターンが異なります。そのため同時に指定しようとすると

そんなパラメータセット(パラメータ指定方法)はありません!

と怒られてしまうんです。

どうしても他の管理者ユーザとして管理権限で実行したい時は、

(苦肉の策ですが...)
① 他の管理者ユーザで PowerShell を実行
② 引数に実行ファイルと管理者権限を指定

という不格好な方法で指定することができます。

すると、

管理者で管理権限で実行-チェシャわら
管理者で管理権限で実行-チェシャわら

このように管理者として起動させることに成功しました。

このようにユーザも指定した”Hoge”ですね。

まとめ

別のユーザとして実行したい場合は

①Start-Process <実行ファイル> -Credential <ユーザ名>

or

②Start-Process <実行ファイル> -Verb runasuser

を使用する。

管理者権限で実行したい場合は、

Start-Process <実行ファイル> -Verb runas

を使用する。

スポンサーリンク

スポンサーリンク

-システム・サービス
-, , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2017 AllRights Reserved Powered by micata2.