Whoami - DOS/コマンドプロンプト コマンド一覧
[Windows Vista以降] 現在のログインセッションにおけるユーザー名や権限などを表示します。
構文
whoami[.exe] [/UPN | /FQDN | /LOGONID]
whoami[.exe] {/ALL | [/USER] [/GROUPS] [/CLAIMS] [/PRIV]} [/FO <format>] [/NH]
オプション一覧
(指定なし) | /UPN | /FQDN | /LOGONID |
各スイッチに応じた以下のいずれかを表示します。
|
||||||||
/ALL | [/USER] [/GROUPS] [/CLAIMS] [/PRIV] | 「/ALL」または欲しい情報のいずれか1つ以上を指定します(後述)。「/ALL」は「/USER /GROUPS /CLAIMS /PRIV」と同じです。 | ||||||||
/USER | ユーザーの情報を表示します。具体的にはユーザー名とSIDの対応を出力します。 | ||||||||
/GROUPS | ユーザーが所属するグループの情報を表示します。具体的にはグループ名・種類・SID・属性を出力します。 | ||||||||
/CLAIMS | ユーザーに付与された属性(Claim)を表示します。主にダイナミックアクセス制御で使用されます。 | ||||||||
/PRIV | ユーザーが持っている権限を表示します。この権限はセッションに基づいたものであるため、UACによる制御・制限を加味した内容となります。 | ||||||||
/FO <format> |
/ALL, /USER, /GROUPS, /CLAIMS, /PRIV での出力内容のフォーマットを指定します。指定できる値は以下の3種類です。/FO を省略した場合は「TABLE」になります。
※ /ALL または「/USER /GROUPS /CLAIMS /PRIV」のうち2つ以上を用いている場合、CSV形式は出力されるデータの種類が変わる際に、空行を挟んで改めてヘッダーが現れます(/NH がある場合は空行の次に次のデータ形式が来ます)。 |
||||||||
/NH | リストデータを出力する際にヘッダーを付加しません。「/FO TABLE」または「/FO CSV」のときに有効です。 |
解説
Whoamiを利用すると、現在のコマンドプロンプト/バッチファイルを実行しているユーザーの名前や権限などの情報を得ることができます。所属グループや権限など、環境変数経由では得られない情報もあるため、単に画面への出力を確認するだけでなく、Forコマンドの拡張構文を用いて値を抽出・チェックするなどの用途も考えられます。
なお、Linux系にも同名のコマンドがありますが、WindowsのWhoamiはオプションによって出力できる情報がより多くなっています。
例
サンプル1
whoami
現在のセッションに基づくユーザー名を「ドメイン\ユーザー名」の形式で出力します。
サンプル2
for /F "delims=" %A in ('whoami') do set "MY_NAME=%A"
[拡張構文] サンプル1で出力される内容を環境変数「MY_NAME」に設定しています。
サンプル3 (バッチファイル)
@echo off setlocal enableextensions set CREATE_SYMLINK= for /F "tokens=1 delims=," %%A in ('whoami /priv /fo csv /nh') do ( if "%%~A"=="SeCreateSymbolicLinkPrivilege" set CREATE_SYMLINK=1 ) if not "%CREATE_SYMLINK%"=="1" ( echo warning: Cannot create symbolic link on this session. ) dosetup.bat
[拡張構文] 現在のセッションに基づくユーザーに「シンボリックリンクの作成権限」があれば環境変数「CREATE_SYMLINK」に値をセットし、その状態でバッチファイル「dosetup.bat」を実行します(実行後は戻りません)。Whoamiの「/PRIV」とForコマンドを組み合わせることで権限の名前(一覧)を抽出できるため、その中に「SeCreateSymbolicLinkPrivilege」があるかどうかをチェックするようにしています。
前述の通りUACの影響を受けるため、ユーザー自体が管理者であっても権限の昇格が行われていなければ「/PRIV」の一覧に当該の権限が含まれません。そのため、Whoamiを使うことで必要な権限チェックを適切に行うことができます。
※ 出力形式をCSVにしているため、各値は「" "」で括られている可能性があります。そのため、「%~A」として「" "」を取り除く対応を行っています。