「ローカルグループの一覧を確認したい…」 「Active Directoryのグループメンバーを調べたい…」 「特定のユーザーがどのグループに所属しているか知りたい…」 「GUIだと時間がかかって効率が悪い…」
Windows環境でグループ管理をする際、PowerShellを使えば効率的に情報を取得・管理できます。
特に、複数のコンピューターやActive Directory環境では、PowerShellの威力は絶大です。コマンド一つで数百のグループ情報を瞬時に取得できるんです。
この記事では、ローカルグループからActive Directoryグループまで、PowerShellでグループ一覧を取得する方法を完全解説します。
システム管理者必見の実践テクニックをマスターしましょう!
ローカルグループの一覧取得 – 基本から応用まで

Get-LocalGroupコマンド(Windows 10/11)
基本的な使い方:
# すべてのローカルグループを表示
Get-LocalGroup
# 結果を見やすく表示
Get-LocalGroup | Format-Table -AutoSize
実行結果の例:
Name Description
---- -----------
Administrators コンピューターへの無制限のアクセス
Users 一般的なユーザー
Guests ゲストアクセス用
Remote Desktop Users リモートデスクトップ接続許可
Power Users レガシー互換性用
特定のグループの詳細情報
グループの詳細を取得:
# Administratorsグループの詳細
Get-LocalGroup -Name "Administrators"
# SIDも含めて表示
Get-LocalGroup -Name "Administrators" | Select-Object *
グループメンバーの一覧取得
メンバー一覧の表示:
# Administratorsグループのメンバー
Get-LocalGroupMember -Group "Administrators"
# 結果を整形して表示
Get-LocalGroupMember -Group "Administrators" |
Select-Object Name, ObjectClass, PrincipalSource
WMIを使った方法(レガシー環境向け)
Windows 7以前でも使える:
# WMIでローカルグループ一覧
Get-WmiObject -Class Win32_Group -Filter "LocalAccount=True" |
Select-Object Name, Description
# 短縮形
gwmi Win32_Group -Filter "LocalAccount=True" | Select Name
Active Directoryグループの一覧取得
AD PowerShellモジュールのインストール
前提条件の確認:
# ADモジュールがインストールされているか確認
Get-Module -ListAvailable ActiveDirectory
# インストールされていない場合(Windows 10/11)
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Get-ADGroupコマンドの基本
すべてのADグループを取得:
# 基本的な一覧取得
Get-ADGroup -Filter *
# 名前とグループスコープを表示
Get-ADGroup -Filter * | Select-Object Name, GroupScope
グループタイプで絞り込み:
# セキュリティグループのみ
Get-ADGroup -Filter {GroupCategory -eq "Security"}
# 配布グループのみ
Get-ADGroup -Filter {GroupCategory -eq "Distribution"}
グループスコープ別の取得
スコープごとのグループ:
# ドメインローカルグループ
Get-ADGroup -Filter {GroupScope -eq "DomainLocal"}
# グローバルグループ
Get-ADGroup -Filter {GroupScope -eq "Global"}
# ユニバーサルグループ
Get-ADGroup -Filter {GroupScope -eq "Universal"}
条件指定での検索とフィルタリング
名前での検索
ワイルドカードを使った検索:
# "Admin"を含むグループ
Get-LocalGroup | Where-Object {$_.Name -like "*Admin*"}
# ADグループで"Sales"を含む
Get-ADGroup -Filter {Name -like "*Sales*"}
# 正規表現での検索
Get-LocalGroup | Where-Object {$_.Name -match "^Remote"}
作成日時での絞り込み(AD)
期間指定の検索:
# 過去30日以内に作成されたグループ
$date = (Get-Date).AddDays(-30)
Get-ADGroup -Filter {Created -gt $date} -Properties Created |
Select-Object Name, Created
メンバー数での絞り込み
メンバー数をカウント:
# ローカルグループのメンバー数を表示
Get-LocalGroup | ForEach-Object {
$members = Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue
[PSCustomObject]@{
GroupName = $_.Name
MemberCount = $members.Count
}
} | Sort-Object MemberCount -Descending
グループメンバーシップの確認
特定ユーザーの所属グループ
ローカルユーザーの場合:
# ユーザーが所属するグループを確認
$userName = "TestUser"
Get-LocalGroup | ForEach-Object {
$group = $_
$members = Get-LocalGroupMember -Group $group.Name -ErrorAction SilentlyContinue
if ($members.Name -contains "$env:COMPUTERNAME\$userName") {
$group.Name
}
}
ADユーザーの場合:
# ユーザーの所属グループ
Get-ADPrincipalGroupMembership -Identity "username" |
Select-Object Name, GroupScope
再帰的なグループメンバーシップ
ネストされたグループも含めて取得:
# ADで再帰的にメンバーを取得
Get-ADGroupMember -Identity "GroupName" -Recursive |
Select-Object Name, ObjectClass
結果の整形と出力

CSV形式でエクスポート
グループ一覧をCSVに保存:
# ローカルグループ
Get-LocalGroup |
Select-Object Name, Description, SID |
Export-Csv -Path "C:\LocalGroups.csv" -NoTypeInformation -Encoding UTF8
# ADグループ
Get-ADGroup -Filter * -Properties Description, Created |
Select-Object Name, GroupScope, GroupCategory, Description, Created |
Export-Csv -Path "C:\ADGroups.csv" -NoTypeInformation
HTML形式でレポート作成
見やすいHTMLレポート:
# スタイル付きHTMLレポート
$style = @"
<style>
table {border-collapse: collapse; width: 100%;}
th {background-color: #4CAF50; color: white; padding: 12px; text-align: left;}
tr:nth-child(even) {background-color: #f2f2f2;}
td {padding: 8px; border: 1px solid #ddd;}
</style>
"@
Get-LocalGroup |
Select-Object Name, Description |
ConvertTo-Html -Head $style -Title "ローカルグループ一覧" |
Out-File "C:\GroupReport.html"
GridViewで対話的に表示
フィルタリング可能な表示:
# GridViewで表示(フィルタリング機能付き)
Get-LocalGroup | Out-GridView -Title "ローカルグループ一覧"
# 選択したグループの詳細を表示
Get-LocalGroup |
Out-GridView -PassThru -Title "詳細を見たいグループを選択" |
ForEach-Object {
Write-Host "グループ: $($_.Name)" -ForegroundColor Yellow
Get-LocalGroupMember -Group $_.Name
}
リモートコンピューターのグループ取得
Invoke-Commandを使った方法
リモートでグループ一覧を取得:
# 単一のリモートコンピューター
$computerName = "Server01"
Invoke-Command -ComputerName $computerName -ScriptBlock {
Get-LocalGroup
}
# 複数のコンピューター
$computers = @("Server01", "Server02", "Server03")
Invoke-Command -ComputerName $computers -ScriptBlock {
Get-LocalGroup | Select-Object @{Name="Computer";Expression={$env:COMPUTERNAME}}, Name, Description
}
CIMセッションを使った方法
より効率的なリモート接続:
# CIMセッションを作成
$session = New-CimSession -ComputerName "Server01"
# グループ情報を取得
Get-CimInstance -CimSession $session -ClassName Win32_Group
# セッションを閉じる
Remove-CimSession -CimSession $session
よく使う実践的なスクリプト
空のグループを探す
# メンバーがいないグループを検出
Get-LocalGroup | ForEach-Object {
$members = Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue
if ($members.Count -eq 0) {
Write-Host "空のグループ: $($_.Name)" -ForegroundColor Red
}
}
管理者権限を持つユーザー一覧
# Administratorsグループの全メンバーを取得
$admins = Get-LocalGroupMember -Group "Administrators"
$admins | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Type = $_.ObjectClass
Source = $_.PrincipalSource
SID = $_.SID
}
} | Format-Table -AutoSize
グループの変更履歴を監視
# イベントログから変更を検出
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4732,4728} |
Select-Object TimeCreated, Message |
Where-Object {$_.Message -like "*group*"}
トラブルシューティング
よくあるエラーと対処法
アクセス拒否エラー:
# 管理者権限で実行
Start-Process powershell -Verb RunAs
ADモジュールが見つからない:
# RSATツールのインストール状態確認
Get-WindowsCapability -Online | Where-Object {$_.Name -like "*ActiveDirectory*"}
# インストール
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
パフォーマンスの改善
大量のグループを効率的に処理:
# 並列処理で高速化
$groups = Get-ADGroup -Filter * -Properties Members
$groups | ForEach-Object -Parallel {
[PSCustomObject]@{
GroupName = $_.Name
MemberCount = $_.Members.Count
}
} -ThrottleLimit 5
セキュリティ監査用スクリプト
特権グループの監査
# 重要なグループのメンバーを監査
$privilegedGroups = @(
"Administrators",
"Domain Admins",
"Enterprise Admins",
"Schema Admins",
"Backup Operators"
)
$report = foreach ($group in $privilegedGroups) {
try {
$members = Get-ADGroupMember -Identity $group -Recursive -ErrorAction Stop
foreach ($member in $members) {
[PSCustomObject]@{
GroupName = $group
MemberName = $member.Name
MemberType = $member.ObjectClass
Date = Get-Date
}
}
} catch {
Write-Warning "グループ $group の取得に失敗: $_"
}
}
$report | Export-Csv "C:\PrivilegedGroupAudit.csv" -NoTypeInformation
まとめ – PowerShellでグループ管理を効率化!
PowerShellを使えば、グループ管理が驚くほど簡単になります!
今日学んだポイント:
✅ Get-LocalGroupでローカルグループを一覧表示
✅ Get-ADGroupでActive Directoryグループを取得
✅ フィルタリングで必要な情報だけ抽出
✅ CSV/HTMLでレポート作成
✅ リモートコンピューターのグループも管理可能
よく使うコマンドまとめ:
# ローカル
Get-LocalGroup
Get-LocalGroupMember -Group "GroupName"
# AD
Get-ADGroup -Filter *
Get-ADGroupMember -Identity "GroupName"
Get-ADPrincipalGroupMembership -Identity "UserName"
PowerShellのグループ管理機能を活用すれば、作業時間を大幅に削減できます。
定期的な監査レポートの自動化も可能です。
ぜひこれらのコマンドを活用して、効率的なシステム管理を実現してください!🎯
コメント