PowerShellでシステムのローカルユーザーリストを取得する方法

local user一覧では、表示名ではなくlocal account SID・Enabled・PrincipalSourceを最初の対象キーにします。変更や集計へ進む前にGet-LocalUserとUsers group membershipを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「SID付きのlocal account表を作れた状態」です。Microsoft Learn:Get-LocalUserのaccount objectとGet-LocalGroupMemberのmembership scopeが定義するGet-LocalUserのaccount objectとGet-LocalGroupMemberのmembership scopeを根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:32-bit PowerShellでLocalAccounts moduleが使えない。該当するときは操作を進めず、読み取りだけなので64-bit sessionで再取得するを実行可能な形で確認してから再計画します。

目次

local user一覧|結論を検証可能な形にする:SID付きのlocal account表を作れた状態

ローカルユーザー一覧は読み取りで完結できます。Get-LocalUserの対象件数とGet-LocalUserの結果が一致し、エラーを除外していないことが合格条件です。

Microsoftアカウント、Entra ID、ドメインユーザーはローカルユーザー一覧と別。32bit PowerShellでLocalAccountsモジュールが使えない場合がある。 そのため、ローカルユーザー一覧の合格判定にはGet-LocalUserだけでなく、現在プロセス、ユーザースコープ、システムスコープを分けて再取得する手順を組み合わせます。

判断要素ローカルユーザー一覧で記録する内容
対象の識別SID、ユーザー/コンピューター名、スコープ、言語またはドメイン
最初の確認Get-LocalUser
変更または操作Get-LocalUser
再確認Get-LocalUser
中止条件再起動後のログオンや認証を保証できず、代替管理者がない

local user一覧|見かけ上の成功を除外する:domainやMicrosoft Entra principalをlocal userと数えること

Get-LocalUserが列挙するのは実行したコンピューターのローカルSAMアカウントです。ComputerName、SID、Name、Enabled、LastLogonを保存し、Active DirectoryやMicrosoftアカウントの一覧と混同しません。

ローカルユーザー一覧は64-bit PowerShellでGet-LocalUserを実行し、Name、SID、Enabled、LastLogonを同時に取得します。対象は端末のローカルアカウントデータベースであり、ドメイン全体やMicrosoft Entra IDのユーザー一覧ではないと範囲を明示します。

コードの結果では表示名よりSIDを識別キーにし、PrincipalSourceが利用できる環境ではLocal、MicrosoftAccount、AzureADなどの出所も保存します。名前が似ていてもSIDが異なる行を同一ユーザーへまとめず、取得不能なプロパティは空値として注記します。

再確認では同じ端末名とSID集合を使い、追加・無効化・削除の差分を分けます。別ホストや別ドメインの同名ユーザーを同一アカウントとして数えません。

特定項目だけを出す場合もName、SID、Enabledを残し、PasswordExpiresやLastLogonは未設定と取得失敗を分けます。Select-Objectで列を減らした結果から管理者グループ所属やサインイン可否まで推測しません。

無効アカウントはEnabledがfalseの行を抽出し、意図的に無効化された組み込みIDや保守用IDを別分類にします。削除候補を決める前にGet-LocalGroupMemberで所属を調べ、LastLogonの空値だけを未使用の根拠にしません。

Get-LocalUserへ渡す対象はSID、ユーザー/コンピューター名、スコープ、言語またはドメインで一意にします。ローカルユーザー一覧の表示名だけを部分一致させて複数件を処理しません。

Select-Objectは取得済みオブジェクトの投影であり、追加の権限確認や再照会は行いません。監査用出力ではSIDとEnabledを必ず保持し、表示名しかないCSVをアカウント変更の入力に使わないようにします。

Where-Objectへ渡す対象はSID、ユーザー/コンピューター名、スコープ、言語またはドメインで一意にします。ローカルユーザー一覧の表示名だけを部分一致させて複数件を処理しません。

Sort-ObjectはNameまたはSIDで順序を安定させますが、重複ユーザーを統合する機能ではありません。文化依存の名前順が変わり得るため、差分監査ではSID順を使い、並べ替え前後の件数が同じことを確認します。

Get-LocalGroupMemberへ渡す対象はSID、ユーザー/コンピューター名、スコープ、言語またはドメインで一意にします。ローカルユーザー一覧の表示名だけを部分一致させて複数件を処理しません。

Format-Listは対話表示向けで、後続処理へ渡すと書式文字列になりやすい点に注意します。CSV保存や比較にはGet-LocalUserのオブジェクトをSelect-Objectへ渡し、画面表示と機械判定を別のパイプラインにします。

local user一覧|最初の観測値を保存する:Get-LocalUserとUsers group membership

ローカルユーザー一覧の読み取り例を示します。最初は通常権限で試し、アクセス拒否が出た箇所だけ必要権限を確認します。

$localUsers = @(Get-LocalUser -ErrorAction Stop | Select-Object Name, SID, Enabled, LastLogon, PasswordRequired, PasswordExpires, Description)
if (@($localUsers | Where-Object { $null -eq $_.SID }).Count -gt 0) { throw 'A local account is missing SID identity' }
$localUsers | Sort-Object SID

Get-LocalUserの結果は現在プロセス、ユーザースコープ、システムスコープを分けて再取得する順に読みます。件数、固有ID、状態、取得時刻を保存すると、後のGet-LocalUserと比較できます。

local user一覧|表示名以外のキーで選ぶ:local account SID・Enabled・PrincipalSource

ローカルユーザー一覧で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-LocalUser で確認します。通常ユーザー。詳細・変更は管理者。対象候補が複数ならSID、ユーザー/コンピューター名、スコープ、言語またはドメインを使い、表示名の部分一致だけで選びません(ローカルユーザー一覧ではGet-LocalUserが同じ対象を返さない場合、読み取りのみなら復旧不要)。

  • ローカルユーザー一覧: 実行端末と現在ユーザーを記録する
  • Get-LocalUser: Source、Version、利用可能なパラメーターを確認する
  • SID、ユーザー/コンピューター名、スコープ、言語またはドメイン: 変更前の値を日時付きで保存する
  • 元の名前、SID、言語リスト、ドメイン状態、復旧用管理者: 復旧に使えることを読み取り確認する
  • 再起動後のログオンや認証を保証できず、代替管理者がない: 該当すれば本番実行を見送る

local user一覧|原状回復の参照値を保存する:読み取りだけなので64-bit sessionで再取得する

ローカルユーザー一覧は読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。

ローカルユーザー一覧の追加確認例です。システムを変更する命令ではなく、Get-LocalUserの結果を別の列や範囲で確かめる目的で使います。

$usersGroup = Get-LocalGroup -SID 'S-1-5-32-545' -ErrorAction Stop
Get-LocalUser -ErrorAction Stop | Where-Object Enabled | Select-Object Name, SID, Enabled | Sort-Object SID
Get-LocalGroupMember -Group $usersGroup.Name -ErrorAction Stop | Select-Object Name, SID, PrincipalSource, ObjectClass

Microsoftアカウント、Entra ID、ドメインユーザーはローカルユーザー一覧と別。32bit PowerShellでLocalAccountsモジュールが使えない場合がある。 そのため、Get-LocalUserの結果が期待どおりでも環境固有の制約を再確認します。

local user一覧|再試行より保全を優先する:32-bit PowerShellでLocalAccounts moduleが使えない

Get-LocalUserの結果が空なら、UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足を一つずつ確認します。ErrorActionで隠した例外をゼロ件として集計しません。

Get-LocalUserで別の対象が返った場合、表示名の一致ではなくSID、ユーザー/コンピューター名、スコープ、言語またはドメインで取り直します。誤対象への変更があれば追加操作を止めます。

ローカルユーザー一覧で予想外の警告が一件でも出たら、対象数と時刻を記録して停止します。別の設定変更で警告を相殺しようとしません。

local user一覧|別の読取経路で照合する:SID付きのlocal account表を作れた状態

Get-LocalUserでは、変更前に保存したSID、ユーザー/コンピューター名、スコープ、言語またはドメインと同じ対象を選びます。現在プロセス、ユーザースコープ、システムスコープを分けて再取得することで、別スコープの値を成功結果として採用しません(ローカルユーザー一覧ではGet-LocalUserが同じ対象を返さない場合、読み取りのみなら復旧不要)。

$builtInAdministrators = @(Get-LocalUser -ErrorAction Stop | Where-Object { $_.SID.Value -match '-500$' })
if ($builtInAdministrators.Count -ne 1) { throw "Expected one built-in Administrator SID; found $($builtInAdministrators.Count)" }
$builtInAdministrators[0] | Format-List Name, Enabled, LastLogon, SID
  • Get-LocalUser: 同じ対象IDを再取得できた
  • ローカルユーザー一覧: 意図した値または件数だけが変化した
  • 現在プロセス、ユーザースコープ、システムスコープを分けて再取得する: 関連機能も異常がない
  • UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足: 取得失敗をゼロ件として扱っていない(ローカルユーザー一覧ではGet-LocalUserの対象件数とGet-LocalUserの再取得値を一致させます)。
  • Microsoftアカウント、Entra ID、ドメインユーザーはローカルユーザー一覧と別。32bit PowerShellでLocalAccountsモジュールが使えない場合がある。: 環境固有の制約に反していない

local user一覧|rollback後も同じ検証を行う:読み取りだけなので64-bit sessionで再取得する

読み取りのみなら復旧不要。アカウント無効化や削除は所有者、サービス利用、復旧用管理者を確認して別承認にする。

ローカルユーザー一覧を戻した後はGet-LocalUserとGet-LocalUserを再実行し、SID、ユーザー/コンピューター名、スコープ、言語またはドメインが変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した元の名前、SID、言語リスト、ドメイン状態、復旧用管理者とログを担当者へ渡します(ローカルユーザー一覧ではGet-LocalUserが同じ対象を返さない場合、読み取りのみなら復旧不要)。

local user一覧|似た機能との違いを確認する:LastLogonが空のaccountをどう読むか

断定できません。ローカルユーザー一覧ではUACトークン、ローカル/ドメインの混同、言語スコープ、権限不足でも空になります。エラーを表示し、権限とスコープを確認してからGet-LocalUserまたは別の公式な取得方法で照合します。

local user一覧|次回比較に使う値を固定する:Get-LocalUserとUsers group membership

  • Get-LocalUserの実行時刻、対象件数、エラー件数を残した
  • SID、ユーザー/コンピューター名、スコープ、言語またはドメインで対象を一意に特定した
  • 元の名前、SID、言語リスト、ドメイン状態、復旧用管理者を変更前に保存して読めることを確認した
  • Get-LocalUserの対象を一端末・一ユーザー・一設定に限定した
  • Get-LocalUserと実利用テストの両方を確認した
  • 再起動後のログオンや認証を保証できず、代替管理者がない場合は実行を中止した

権限だけが原因とは限りません。Microsoftアカウント、Entra ID、ドメインユーザーはローカルユーザー一覧と別。32bit PowerShellでLocalAccountsモジュールが使えない場合がある。 再起動後のログオンや認証を保証できず、代替管理者がないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(ローカルユーザー一覧ではGet-LocalUserの対象件数とGet-LocalUserの再取得値を一致させます)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次