Programming Field

Runas - DOS/コマンドプロンプト コマンド一覧

[Windows 2000以降] 別ユーザーでプログラムを実行します。

構文

runas[.exe] [[/noprofile | /profile] [/env] [/savecred | /netonly]]
    /user:<user-name> <program>
runas[.exe] [[/noprofile | /profile] [/env] [/savecred]]
    /smartcard [/user:<user-name>] <program>
runas[.exe] /trustlevel:<level> <program>
runas[.exe] /showtrustlevels

オプション一覧

/noprofile [Windows Vista以降] 指定したユーザーのプロファイルを読み込まないようにします。プロファイルを読み込まない場合、その分の起動時間が省略され速くなる場合がありますが、プロファイルを読み込まないと例えば HKEY_CURRENT_USER レジストリがデフォルトのものが使用されるようになるため、ユーザー設定などに依存したプログラムは意図しない挙動になる可能性があります。
/profile

指定したユーザーのプロファイルを読み込んでプログラムを起動します。

[Windows Vista以降] /noprofile を指定しない場合はプロファイルを読み込むため、/profile の明示的な指定は不要です。

[Windows XP以前] /profile を指定しない場合はユーザーのプロファイルを読み込みません。/noprofile の箇所に記載した注意事項もご覧ください。

/env プログラムを起動する際、実行環境(環境変数)を現在の環境から引き継いで実行します。既定では新たにユーザーに対応する環境が作られて起動されます。現在の環境に設定されている環境変数を引き継ぎたい場合に有用ですが、USERPROFILE 環境変数などユーザー別の設定値がある環境変数も引き継がれるため、それらの変数に依存するプログラムを起動する場合は注意が必要です。
/savecred [Windows Vista以降] システムに保存された資格情報(パスワードなどログインに必要な情報)を使ってユーザーのログインを試みます。また、保存済みでない場合は /savecred を指定しない場合と同じようにパスワードの入力などを求められますが、そこで認証に成功した場合資格情報が保存され、次回 /savecred を使った際に入力を省略することができます。
/netonly

指定したユーザーの資格情報をプログラムそのものに対してではなくネットワーク越しのアクセス(リモートアクセス)において使うようにします。/netonly を使用した場合、ローカルでは指定ユーザーを使ってログインを行わないため、ローカルでログインできないユーザー名でもプログラムの起動をすることができますが、ネットワークファイルの操作を行う際などにその資格情報が使用されるため、ネットワークアクセスで有効となるユーザーを使う必要があります。

なお、/netonly は /profile および /savecred とともに使うことはできません。

/user:<user-name> ユーザー名を指定します。<user-name> には「ドメイン名\ユーザー名」または「ユーザー名@ドメイン名」の形式を利用します。前者の形式で「ドメイン名\」を省略した場合はローカルシステムのユーザーが使用されます。
/smartcard [Windows Vista以降] ユーザー資格情報をスマートカードから読み取る場合に指定します。このオプションを指定した場合は /user オプションを省略できます。
<program>

実行するプログラム名またはコマンドラインを指定します。コマンドラインを指定する場合は全体を「" "」で括る必要があります(コマンドラインに「"」を含めたい場合は「\"」とします)。

Startコマンドと異なり、先頭には必ず実行可能ファイルを指定する必要があります。

/trustlevel:<level> <program>

[Windows Vista以降] プログラムを指定した信頼レベルで起動します。<level> には主に以下の値(0x で始まる数値)が使用できます。

名前意味
0x10000CONSTRAINEDプログラムは特定のリソースにアクセスできなくなります(例として)。0x20000 より厳しい制限が適用されます。
0x20000NORMALUSERプログラムは管理者権限などを持たない「通常ユーザー」として実行されます。
0x40000FULLYTRUSTEDプログラムはユーザーの権限そのままに実行されます(ユーザーの権限を縛ることをしません)。

※ 上記は Safer API の Level ID として指定できる値と一致します。そのため「0」(DISALLOWED)や「0x1000」(UNTRUSTED)も指定は可能ですが、制限が厳しすぎてプログラムが実行できません。
※ /trustlevel を使わない通常のプログラム実行時は、「ソフトウェアの制限のポリシー (SRP)」の「セキュリティ レベル」で設定されている既定値が使用されます。

/showtrustlevels [Windows Vista以降] /trustlevel で指定できる値の一覧を出力します。ただし実際には上記に記載した値が使用できます。

解説

Runas使用例

Runas を使用することでログインユーザーと異なるユーザーでプログラムを実行することができます。たいていの場合はログインユーザーより強い権限を持つユーザー(管理者など)を使ってプログラムの起動を行うのに使用します。

ユーザーを指定する際、パスワードをコマンドラインから指定することはできません。リダイレクションやパイプを用いても入力を与えることはできず、入力が必要な場合は必ずプロンプト上で入力する必要があります。

[Windows Vista以降] Runas では異なるユーザーでのプログラム実行はできますが、UAC による権限の昇格は行いません。そのため、管理者権限の持つユーザーを指定して Runas でプログラムを実行しても、権限不足でうまく動作しない可能性があります。(サンプル2も参照)

サンプル1

runas /user:myoperator "myprog.exe C:\Users\myoperator\Documents\note.txt"

「myoperator」ユーザーで「myprog.exe」を「C:\Users\myoperator\Documents\note.txt」のパラメーターで実行します。

サンプル2

runas /user:Administrator "powershell Start-Process cmd.exe -Verb runas"

[Windows Vista以降] コマンドプロンプトを「Administrator」ユーザーで起動します(「管理者として実行」のコマンドライン版と言えます)。その際、UAC による権限の昇格も行うようにします。(PowerShell の「Start-Process」は Verb を指定することが可能で、EXE ファイルの「runas」Verb を実行することで権限の昇格を行うことができます。) Runas のみでは権限の昇格ができないので、PowerShell のコマンドを組み合わせることによって昇格を行います。

サンプル3

runas /trustlevel:0x20000 UnsafeApp.exe

[Windows Vista以降] 「UnsafeApp.exe」を現在のユーザーで実行しつつ、そのユーザーの権限を一般ユーザーレベルとします。現在のユーザーが管理者権限を持っており、実行したいプログラムに対して管理者権限を使わせたくない場合に有用です。