Windowsのコマンドプロンプトは、システム管理者やパワーユーザーにとって便利なツールです。その中でも「net user」コマンドは、ユーザーアカウントの一覧や設定を確認できます。本記事では、ローカルアカウントとActive Directoryドメインアカウントを区別しながら、情報の取得、結果の読み方、テキスト・CSVへの保存方法を説明します。
この記事の範囲はアカウント情報の参照です。アカウントの作成・削除・無効化、パスワードやポリシーの変更は行いません。保存例のみローカルファイルを作成します。自分が確認を許可されたPC・ドメインで実行してください。
「net user」コマンドの基本
「net user」にはアカウントを変更する機能もありますが、引数なし、またはユーザー名だけを指定すれば情報を参照できます。まず、どこにあるアカウントを調べるかを決めましょう。
参照に使う構文
net user
net user "User1"
net user /domain
net user "User1" /domain- net user:実行したPCのローカルユーザー一覧を表示します。通常のWindowsクライアント・メンバーサーバーでの説明です。
- net user “User1”:そのPCにある「User1」の詳細を表示します。User1は実在するローカルユーザー名に置き換えてください。
- net user /domain:PCのプライマリドメインにあるドメインコントローラー(DC)へ、ドメインユーザー一覧を問い合わせます。
- net user “User1” /domain:同じドメインの「User1」の詳細を問い合わせます。ローカルのUser1とは別アカウントの場合があります。
「/domain」は情報を詳しくするオプションではなく、照会先をドメイン側に変える指定です。任意のドメイン名を指定するオプションでもありません。構文と照会先の定義は、Microsoft公式のnet user資料で確認できます。なお、DCは通常のPCとはアカウント管理の仕組みが異なるため、以下のローカル一覧・CSV例はDCを対象としません。DC上のアカウントについても参照してください。
「すべてのユーザー」とは限らない
ローカルの「net user」は、そのPCにサインインできる人を組織全体から集めるコマンドではありません。ADドメインやMicrosoft Entra IDの全ユーザー、過去にサインインした人の全履歴、ユーザープロファイルの一覧とは別物です。無効な組み込みアカウントが表示されることもあります。
Microsoftアカウントに接続されたローカルアカウントもありますが、ローカルアカウント名がメールアドレスや画面の表示名と一致するとは限りません。Get-LocalUserの公式説明も、このような接続済みのローカルアカウントを取得対象に含めています。
Microsoft Entra IDへの参加と、従来のADドメインへの参加も区別してください。Entra IDだけに参加したPCで「/domain」を付けても、Entraテナントのユーザー一覧を取得することにはなりません。Microsoft Entra Domain Servicesは、さらに別のマネージドドメインサービスです。Microsoftによるディレクトリサービスの比較を参照してください。
コマンドの実行方法
Windowsのコマンドプロンプトで「net user」を実行する手順を説明します。Windows Terminalを使う場合は、タブが「コマンドプロンプト」なのか「PowerShell」なのかも確認してください。後半のPowerShell例はCMDへそのまま貼り付けられません。
コマンドプロンプトの起動
- スタートメニューを開く:Windowsキーを押します。
- 「cmd」と入力:検索結果の「コマンドプロンプト」を選択します。
- まず通常の権限で開く:情報の参照だけなら、最初から管理者として開く必要は通常ありません。
管理者権限が必要か確認する
アカウント変更には管理者権限が必要になることがありますが、本記事は参照のみです。アクセスが拒否された場合は、照会先・実行アカウント・組織のアクセス制限を確認してください。ローカルで昇格しても、ドメイン側の閲覧権限や通信障害が解消されるとは限りません。必要性と権限が確認できた場合だけ、検索結果を右クリックして「管理者として実行」を選びます。制限を回避するために設定を変更しないでください。
基本的なコマンドの実行
net userEnterキーを押し、ローカルユーザー一覧を確認します。詳しく調べたいアカウント名が見つかったら、次のように指定します。ユーザー名に空白がある場合も、二重引用符で囲みます。
net user "User1"「User1」は説明用の名前です。実際の一覧から選び、角括弧や山括弧を付けずに入力してください。ユーザー名の後ろへパスワード文字列や「*」を追加すると参照ではなくパスワード設定の操作になるため、追加しないでください。ヘルプだけを表示したい場合は「net user /?」を使えます。
実行結果の確認
一覧は、見出し・区切り線・複数列のアカウント名・終了メッセージを含む表示用テキストです。次はアカウント名部分だけを抜粋した模式例で、実機の測定結果ではありません。組み込みアカウントの種類や表記は環境によって異なります。
Administrator DefaultAccount Guest
User1 User2一覧に名前があることと、そのアカウントが有効であることは同義ではありません。詳細表示で状態を確認してください。
ユーザー情報の取得と結果の読み方
「net user “User1″」では、アカウント名、説明、状態、パスワードに関する日時、グループ所属などを確認できます。表示言語・Windowsのバージョン・対象アカウントによってラベルや値が異なるため、日本語の特定の文字列だけに依存した自動処理には向きません。
取得できる情報の種類
- ユーザー名・フルネーム・コメント:アカウントの識別情報や説明です。フルネームとログオン用の名前は別の場合があります。
- アカウントの有効状態・有効期限:アカウント自体の状態です。パスワードの有効期限とは区別します。
- パスワードの最終設定日時・有効期限・変更可能日時:パスワードに関する属性です。パスワードそのものやハッシュは表示されません。
- パスワードの必要性・ユーザーによる変更の可否:設定上のフラグです。「必要ない」という表示だけで、実際に空のパスワードだとは断定できません。
- 最後のログオン:調査の手がかりとなる記録です。組織全体の完全な利用履歴や、現在サインイン中であることを示すものではありません。
- ログオン可能時間・ワークステーション・ホームディレクトリなど:該当する設定を確認します。空欄の項目もあります。
- ローカル/グローバルグループの所属:グループ情報です。これだけで、そのユーザーの全権限や現在の管理者昇格状態を確定しないでください。
具体的な表示項目の例
次は英語表示の項目名を読むための模式例(一部抜粋、実測ログではありません)です。表示全体の再現ではなく、確認すべき項目の例として示しています。
User name User1
Account active Yes
Account expires Never
Last logon Never
Local Group Memberships *Usersたとえば「Account active」は有効状態、「Account expires」はアカウントの期限です。「Never」や空欄の解釈は項目ごとに異なります。「Last logon」のNeverを、その人があらゆる端末・サービスを一度も利用していない証拠として扱わないでください。また、ロックアウトを明確に調査する場合は、対象に対応する管理ツールや監査記録で確認し、この出力に専用のロックアウト欄が常にあるとは考えないでください。
グループ所属と有効な権限を分ける
グループには入れ子(別のグループをメンバーに含む構成)があり、ADにはprimaryGroupIDで表されるプライマリグループもあります。単純な所属一覧やmemberOf属性だけを、間接所属・プライマリグループ・すべてのアクセス権を含む完全な一覧として扱わないでください。必要な調査では、対象リソースのアクセス許可も併せて確認します。間接的なローカルグループ所属、memberOf・primaryGroupId・tokenGroupsの違いが参考になります。
今このコマンドを動かしている自分のコンテキストを調べる場合は、次の参照コマンドが使えます。他人のアカウント情報を指定して取得するコマンドではありません。
whoami /user
whoami /groups
whoami /priv「whoami /all」は現在のアクセストークンの情報をまとめて表示します。管理者グループのメンバーでも、UACによって通常のアプリと昇格したアプリではトークンが異なることがあります。グループ名があるだけで「このウィンドウは管理者権限」と判断しないでください。whoamiの仕様、UACの動作を参照してください。
特定ユーザーのドメイン情報を取得する
ローカルとドメインを取り違えない
net user "User1" /domainこの例は、PCのプライマリドメインの「User1」を照会します。ローカルアカウントを調べたい場合は「/domain」を外します。ADドメインへの参加状態、DCへの通信、DNSや組織で指定されたVPN、閲覧権限などによって、ドメイン照会が利用できないことがあります。失敗時は管理者へ状況を確認し、認証・ネットワーク制限を無断で緩めないでください。
最後のログオンだけで未使用と決めない
最後のログオン日時は棚卸しの手がかりにはなりますが、古い日時を理由に直ちにアカウントを無効化・削除するのは危険です。ADのlastLogonはDC間で複製されず、DCごとに記録が異なります。AD全体の最終記録を調べるには各DCの値の確認が必要です。複製されるlastLogonTimestampも毎回のログオンで即時更新される属性ではありません。AD属性の複製範囲、lastLogonTimestampの更新条件を参照してください。
さらに、DCへ接続できない端末ではキャッシュされた情報でサインインできる場合があり、その利用をDC側の日時だけで把握できるとは限りません。キャッシュされたドメインログオンの説明を踏まえ、端末・認証基盤の監査記録、本人や管理者への確認、サービスやタスクの依存関係を照合してください。この記事ではアカウントの停止操作は扱いません。
応用例:ユーザーリストのエクスポート
取得した一覧は、棚卸しや報告書の資料として保存できます。ただし、テキストやCSVはアカウントを復元できるバックアップではありません。認証情報、完全な権限設定、プロファイルなどを丸ごと保存するものではなく、ここで選んだ項目の記録です。
CMDで一覧をテキストに保存する
CMDの「>」は出力をファイルに保存しますが、同名ファイルがあると上書きします。Cドライブのルートではなく、アクセス権を確認した自分の保存先を指定しましょう。次はユーザープロファイル直下の「userlist.txt」が既にあれば、保存せずにメッセージを表示する例です。コマンドプロンプトで実行してください。
if exist "%USERPROFILE%\userlist.txt" (
echo 保存先は既に存在します。別のファイル名を指定してください。
) else (
net user > "%USERPROFILE%\userlist.txt"
)これは同名ファイルを事前確認する簡易的なガードであり、別プロセスとの同時書き込みを排除するものではありません。保存先フォルダーの共有・同期設定にも注意してください。ファイルが作成されただけで照会成功と判断せず、内容とエラーの有無を確認します。
type "%USERPROFILE%\userlist.txt"保存内容にはヘッダーや終了メッセージも含まれます。日本語が文字化けする場合は、CMD・出力・読み取りアプリの文字コードの違いを確認してください。以下のCSV例では文字コードを明示します。
CSVはPowerShellのオブジェクトから作る
「net user」の出力からfindやfindstrで見出しを取り除き、拡張子を.csvに変えるだけでは、ユーザー1件を1行の列データにしたCSVにはなりません。表示上の列幅や言語に依存する文字列解析も壊れやすいため、ローカルユーザーのCSVにはPowerShellを使います。
次の例は64ビット版Windows上の64ビット版Windows PowerShell 5.1を想定します。スタートメニューから「Windows PowerShell」を開き、「Windows PowerShell (x86)」は選ばないでください。LocalAccountsモジュールは64ビットOS上の32ビットPowerShellでは利用できません。Get-LocalUserの動作条件を確認してください。
$PSVersionTable.PSVersion
[Environment]::Is64BitProcess
Get-Command Get-LocalUser -ErrorAction Stop続いて、必要なプロパティだけを選び、UTF-8のCSVとして保存します。取得が失敗した場合は、保存処理へ進まないようにしています。ファイル名や保存先は運用に合わせて変更してください。
try {
$users = @(Get-LocalUser -ErrorAction Stop)
$path = Join-Path $env:USERPROFILE 'local-users.csv'
$users |
Select-Object Name, Enabled, FullName, Description, SID |
Export-Csv -LiteralPath $path -NoTypeInformation -Encoding UTF8 -NoClobber -ErrorAction Stop
Import-Csv -LiteralPath $path -Encoding UTF8 -ErrorAction Stop |
Select-Object Name, Enabled, SID
} catch {
Write-Error ('保存または確認に失敗しました: ' + $_.Exception.Message)
}「-NoClobber」は既存ファイルの上書きを防ぎ、「-NoTypeInformation」は型情報行を省きます。同名ファイルがある場合は別名を選び、確認せずに「-Force」で回避しないでください。失敗した場合は、途中まで作成されたファイルをそのまま報告書に使わず、原因と内容を確認してください。これはローカルユーザーのCSVであり、ADやEntra IDの全ユーザー一覧ではありません。Export-Csvの仕様を参照してください。
Windows PowerShell 5.1では「-Encoding UTF8」はBOM付きUTF-8です。PowerShell 7では同じ指定がBOMなしになるため、ExcelなどでBOM付きが必要な場合はPowerShell 7で「-Encoding utf8BOM」を使います。「utf8BOM」はWindows PowerShell 5.1の指定ではありません。PowerShellの文字コードの違いも確認してください。
Get-LocalUserが使えない場合のCIMによる参照
Get-LocalUserが見つからない場合は、まずPowerShellのビット数と対応環境を確認します。別の取得方法として、WindowsのCIMクラスを照会できます。次もPowerShellで実行する参照例であり、取得項目はGet-LocalUserと同じではありません。
Get-CimInstance -ClassName Win32_UserAccount -Filter "LocalAccount = TRUE" -ErrorAction Stop |
Select-Object Name, Domain, SID, Disabled, Lockout「LocalAccount = TRUE」でそのコンピューターに定義されたアカウントに対象を絞ります。フィルターなしの広い列挙は避けてください。「Disabled」は無効状態を表すため、Get-LocalUserの「Enabled」と意味が逆です。CIM例には最終ログオン日時は含めていません。Win32_UserAccountのプロパティ、Get-CimInstanceの仕様を参照してください。
エクスポートの活用方法
- 棚卸し:取得日時・取得したPC・ローカル/ドメインの区別とともに記録します。
- レポート作成:監査の目的に必要な列だけを残し、過去の記録と比較します。
- 管理者への確認資料:状態や不一致を確認する材料にします。CSVだけを根拠にアカウントを削除しないでください。
CSVを表計算ソフトで開く場合は、自由入力の名前・説明などを数式として解釈させないよう、データの取り込み機能で文字列として扱うなど、内容を確認してください。引用符で囲まれたCSVであることと、表計算ソフトによる数式評価を防ぐことは別です。取り込み時の列形式については、Microsoftのテキストインポート手順を参照してください。
セキュリティ上の注意点
最小限の権限で参照する
管理者権限は必要な場合だけ使用します。本記事の参照手順に、アカウント作成・削除・有効化/無効化・グループ変更を混ぜないでください。閲覧のエラーを解消するためにアクセス制御や認証設定を変更するのではなく、管理者へ権限と対象を確認します。
ユーザー情報の取り扱い
- 情報の保管:エクスポートしたユーザーリストや詳細情報は、安全な場所に保管します。
- アクセス制限:氏名、アカウント名、SID、所属などを共有する相手は業務上必要な人に限定します。公開リンクや不用意な添付を避けてください。
- 秘密情報は取得しない:本記事で必要なのはアカウント属性だけです。パスワード、ハッシュ、トークンなどを取得・保存する手順は不要です。
パスワード管理は組織の方針と最新の指針に従う
「パスワードを必ず定期的に変える」「文字種を増やせば安全」と一律に勧めることはできません。長く推測されにくい固有のパスワード、使い回しの防止、対応するサービスでの多要素認証などを、組織の要件に合わせて検討します。Microsoftはクラウド専用アカウントについて、定期的な期限切れを推奨していません。ただし、これを根拠にローカル・ADのポリシーを無断変更するものではありません。漏えいが疑われる場合は組織の対応手順に従ってください。Microsoftのパスワード方針が参考になります。
ログと監査を併用する
取得した一覧はある時点の設定の記録で、操作やサインインの完全な監査ログではありません。監査ログは設定と保持期間に左右されるため、ログがないだけで操作がなかったと断定しないでください。必要な権限を持つ管理者が、不審な動きや業務上の利用状況を関連する記録と照合します。
権限の見直しとセキュリティ教育
各ユーザーの役割に応じて必要最小限の権限を保つこと、定期的に権限を見直すことは重要です。ただし、実際の変更は影響範囲と承認を確認してから別の作業として行います。フィッシング詐欺やマルウェア、安全なパスワード管理、ソフトウェア更新についても継続的に周知しましょう。
よくあるトラブル
- ユーザーが見つからない:ローカルかドメインか、アカウント名か表示名か、入力ミスがないかを確認します。同名でもPCが違えば別のローカルアカウントです。
- ドメインに接続できない:AD参加状態と組織で案内されたネットワーク・VPNの状態を確認します。Entra IDへの参加だけで「/domain」が使えると考えないでください。
- アクセスが拒否される:対象を参照する権限と組織の制限を管理者へ確認します。無条件に管理者として開き直すだけでは解決しない場合があります。
- PowerShellのコマンドが認識されない:CMDにPowerShell構文を貼っていないか、PowerShellのバージョン・ビット数・モジュールを確認します。
- CSVが保存できない:同名ファイルの存在、保存先の書き込み権限、他のアプリでの使用状況を確認します。既存ファイルを残す場合は別名を指定してください。
演習問題:アカウントを変更せずに確認する
自分が参照を許可されたPCで実施してください。「User1」「User2」は実在するアカウント名に置き換えます。該当するアカウントがなければ、演習のために新規作成する必要はありません。
演習1:ローカルユーザー一覧を表示
net user一覧に表示された名前を確認し、ADやEntra IDの全ユーザー一覧ではないことを説明してください。
演習2:特定ユーザーの詳細情報を取得
net user "User1"アカウントの状態、アカウントの期限、パスワードの期限を区別して確認してください。グループ欄だけで全権限を断定しないことも確認します。
演習3:テキスト保存とCSV保存の違いを確認
前述のCMDの保存例を使い、ヘッダーを含む表示用テキストが保存されることを確認します。次にPowerShellのCSV例を使い、Name・Enabled・FullName・Description・SIDが列になることを確認してください。同名ファイルがある場合は別名で保存し、既存ファイルは上書きしません。
演習4:パスワードの最終設定日を確認
net user "User2"詳細からパスワードの最終設定日時を確認します。パスワードそのものを取得する演習ではありません。「最後のログオン」が古くても、未使用と断定して無効化しないでください。
演習5:ドメイン側の照会先を説明
利用を許可されたADドメイン環境がある場合に限り「net user “User1” /domain」で参照し、同名のローカルアカウントとの違いを確認してください。該当する環境がなければ、実行せず「/domain」の意味を確認するだけで構いません。
まとめ
「net user」は、ユーザー一覧や個別アカウントの設定をすばやく確認するのに便利です。通常のPCでは、引数なしでローカル一覧、ユーザー名で詳細、「/domain」でADドメイン側を照会します。Microsoft Entra IDやMicrosoftアカウントを混同せず、確認したいアカウントの所在に合った方法を選びましょう。
結果は調査の手がかりであり、グループ欄だけで全権限を、最後のログオンだけで未使用を判断することはできません。保存はテキストと構造化CSVを使い分け、既存ファイルと個人情報を保護してください。アカウントを変更する作業は、参照・棚卸しとは分けて、必要な確認と承認を経て行います。


コメント