Programming Field

DOS コマンド一覧

Whoami

スポンサーリンク

[Windows Vista以降] 現在のログインセッションにおけるユーザー名や権限などを表示します。

構文

whoami[.exe] [/UPN | /FQDN | /LOGONID]
whoami[.exe] {/ALL | [/USER] [/GROUPS] [/CLAIMS] [/PRIV]} [/FO <format>] [/NH]
(指定なし) | /UPN | /FQDN | /LOGONID
各スイッチに応じた以下のいずれかを表示します。
  • 指定なし: ユーザー名(「ドメイン名\名前」の形式)
  • UPN: ユーザープリンシパル名(「名前@ドメインFQDN名」の形式)
  • FQDN: 完全修飾識別名(「CN=xxx,DN=yyy」など)
  • LOGONID: ログオンID(ログオンSID; 「S-1-5-5-xxx-yyy」の形式)
/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」になります。
指定する値意味
TABLE疑似的なテーブル表記で出力します。出力内容によっては広い横幅になるため、既定のコマンドプロンプトの幅では表示が崩れる場合があります。
LIST「項目名: 結果」といった対応で情報を表示します。出力された内容を人の目で確認する際に便利な形式です。また、項目名に「:」が入ることがないため(Windows 10での確認)、項目によってはForコマンドでの解析が行いやすい場合があります。
CSVCSV形式で出力します。各種スクリプト言語やプログラムなどで出力結果を解析したい場合に便利です。(Forコマンドでもある程度解析できる可能性はありますが、" " 内に区切り文字が入ることがある場合は解析方法を工夫する必要があります。)
※ /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」として「" "」を取り除く対応を行っています。