PowerShellでローカルユーザー情報を取得:Get-LocalUserコマンドの5つの具体的な利用例

Get-LocalUserはWindows端末に登録されたローカルユーザーを読み取り専用で確認するコマンドです。最初にGet-Command Get-LocalUserと$PSVersionTableを実行し、Microsoft.PowerShell.LocalAccountsモジュールが利用できる64ビットのWindows PowerShellまたはPowerShellかを確認してください。64ビットWindows上の32ビットPowerShellではこのモジュールを利用できません。また、Get-LocalUserだけでは「管理者か」を判定できず、Administratorsグループの実メンバーをGet-LocalGroupMemberで確認する必要があります。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

利用条件と出力の読み方

Get-LocalUserはローカルアカウントを対象とし、Active DirectoryやMicrosoft Entra IDの全ユーザー一覧を取得するコマンドではありません。組み込みアカウント、作成したローカルアカウント、Microsoftアカウントに接続したローカルアカウントが対象です。ドメインコントローラーのようにローカルSAMの扱いがメンバーサーバーと異なる役割では、同じ前提で使いません。

代表的なプロパティはName、Enabled、Description、SID、PasswordRequired、PasswordExpires、UserMayChangePassword、LastLogonです。LastLogonが空でも「一度も使われていない」と即断できず、ログの保持、サインイン方式、取得元の制約と照合します。Descriptionにadminという文字があるかどうかは権限判定になりません。

Get-Command Get-LocalUser
$PSVersionTable | Select-Object PSEdition, PSVersion
[Environment]::Is64BitProcess
Get-Module Microsoft.PowerShell.LocalAccounts -ListAvailable

コマンドが見つからない場合は、まず32ビットホストを開いていないか確認します。モジュールを非公式サイトから取得したり、実在しない代替コマンドを作ったりせず、対象OSとPowerShellホストを揃えます。PowerShell 7を使う場合もWindows上でモジュールが実際に読み込めることをGet-Commandで確認します。

利用例1:ローカルユーザーを棚卸しする

Get-LocalUser |
  Select-Object Name, Enabled, SID, Description |
  Sort-Object Name

端末上のローカルユーザー名、有効状態、SID、説明を一覧にします。SIDは表示名変更後も識別に役立つため、監査ではNameだけでなく保持します。組み込みアカウントは端末や言語で表示名が異なり得るので、固定の英語名だけを条件にしない設計が安全です。結果件数と端末名を同じ記録へ残します。

利用例2:特定ユーザーを名前またはSIDで確認する

Get-LocalUser -Name 'svc-backup' | Format-List *

# SIDが分かっている場合
Get-LocalUser -SID 'S-1-5-21-000000000-000000000-000000000-1002'

実際のユーザー名やSIDへ置き換えます。存在しない名前ではエラーになるため、自動処理では-ErrorAction Stopとtry/catchで対象不在を明確に記録します。Format-List *は画面確認向けです。CSVへ出す場合は必要なプロパティを明示し、個人情報を過剰収集しません。

利用例3:有効状態とパスワード属性を確認する

Get-LocalUser |
  Select-Object Name, Enabled, PasswordRequired, PasswordExpires, UserMayChangePassword, LastLogon |
  Sort-Object Enabled, Name

これは状態確認だけで、アカウントを無効化したりパスワード方針を変更したりしません。PasswordExpiresがFalseでも、サービス用途として承認済みか、例外が放置されているかは別の統制情報で判断します。LastLogonは削除候補の確定根拠にせず、所有者、タスク、サービス、イベント、資産台帳を照合します。

利用例4:本当にローカル管理者かを確認する

管理者権限はDescriptionではなく、ローカルAdministratorsグループのメンバーシップで確認します。表示名はOS言語で変わるため、既知SID S-1-5-32-544からグループを解決します。これなら日本語環境の「Administrators」表示差にも依存しにくくなります。

$adminGroup = Get-LocalGroup -SID 'S-1-5-32-544'
Get-LocalGroupMember -Group $adminGroup |
  Select-Object Name, ObjectClass, PrincipalSource, SID

結果にはローカルユーザーだけでなく、ドメイングループ、Microsoft Entraグループ、Microsoftアカウントなどが含まれる場合があります。ローカルユーザー一覧と単純に名前一致させると見落とすため、PrincipalSourceとSIDも確認します。グループの入れ子による実効権限は、表示された直接メンバーだけで完結しない場合があります。

利用例5:CSVへ安全に記録する

$out = Join-Path $env:USERPROFILE 'Documents\local-users.csv'
Get-LocalUser |
  Select-Object Name, Enabled, SID, PasswordRequired, PasswordExpires, LastLogon |
  Export-Csv -LiteralPath $out -NoTypeInformation -Encoding utf8
Get-Item -LiteralPath $out | Select-Object FullName, Length, LastWriteTime

出力先を明示し、作成後にファイルが存在することを確認します。CSVにはユーザー名、SID、最終ログオンなどのセキュリティ情報が含まれるため、共有フォルダーへ無条件に置かず、必要な担当者だけが読める保存先と保管期限を設定します。画面出力とCSV件数を比較し、文字化けや列欠落も確認します。

Get-LocalUserが使えない場合の代替

対応するWindows環境でLocalAccountsモジュールが使えない場合、CIMのWin32_UserAccountを利用できます。ただし返す型とプロパティが異なり、完全互換ではありません。LocalAccount=Trueで端末ローカルへ絞り、Domainがコンピューター名であることを確認します。

Get-CimInstance -ClassName Win32_UserAccount -Filter 'LocalAccount=True' |
  Select-Object Name, Domain, SID, Disabled, Lockout, PasswordRequired

CIM例ではEnabledではなくDisabledなど別の列になります。スクリプト内で両方式を混ぜる場合は、列名と真偽の意味を正規化し、どちらの取得方法を使ったか記録してください。リモート取得は権限、ファイアウォール、CIMセッションの設計が追加で必要なので、本記事のローカル確認とは別作業です。

結果を監査へ使うときの限界

ローカルユーザーが存在すること、無効であること、最終ログオンが古いことだけでは、不要アカウントと確定できません。サービスのログオン、スケジュールタスク、共有フォルダーのACL、資格情報管理、復旧手順で参照される場合があります。変更候補はSIDで特定し、所有者と用途を確認し、代替手段を準備してから承認へ回します。

管理者グループにドメイングループが入っている場合、端末上の直接メンバー一覧だけでは、そのグループに属する個々のユーザーまで展開されません。ドメイン管理者と連携し、グループの入れ子や一時的な特権付与を別資料で確認します。ローカル情報とディレクトリ情報を同じ列に混ぜる場合は取得時刻と取得元を明記します。

検証と運用上の注意

結果はコンピューターの管理、設定画面、ローカルユーザーとグループMMCが利用できるエディションではその表示と突き合わせます。HomeなどUIや管理スナップインが異なる環境でも、コマンドのモジュール可用性を実測します。スクリプトは代表端末で件数とSIDを照合してから展開します。

ここで示したコマンドは読み取り専用です。Disable-LocalUser、Remove-LocalUser、グループ変更へ進む場合は、対象SID、所有者、依存するサービスやタスク、代替管理者、バックアップ、承認、復元方法を別途用意します。棚卸し結果だけで組み込みアカウントや不明アカウントを削除しないでください。

公式情報・参考資料

この記事を書いた人

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

コメント

コメントする

目次