はじめに
Active Directory 管理というと、
多くの人はまず 「Active Directory Users and Computers(ADUC)」 を開きます。
もちろんGUIは便利です。
ですが、実務やラボ、あるいは自動化まで考えると、PowerShellで操作できるようになる価値はかなり大きいです。
たとえばPowerShellを使えると、次のようなことができます。
- ユーザーを一括作成する
- OUをまとめて作る・削除する
- グループに複数ユーザーを一気に追加する
- 退職者のアカウントを無効化して専用OUへ移動する
- コンピュータアカウントを調査する
- 属性変更や監査用の一覧取得を自動化する
つまり、PowerShellは
「手作業を減らす道具」 というより、
「AD管理を再現可能な作業に変える道具」 です。
1. 前提知識
1.1. 必要なモジュール
AD操作には通常、ActiveDirectory モジュール を使います。
まず確認します。
Get-Module -ListAvailable ActiveDirectory
読み込みます。
Import-Module ActiveDirectory
読み込めたか確認します。
Get-Command -Module ActiveDirectory
よく使うコマンドは次のあたりです。
Get-ADUserNew-ADUserSet-ADUserRemove-ADUserGet-ADGroupAdd-ADGroupMemberGet-ADOrganizationalUnitNew-ADOrganizationalUnitMove-ADObjectGet-ADComputer
1.2 管理者権限と実行環境
AD操作は、対象によって必要権限が異なります。
読めるだけなら一般権限でも一部可能ですが、作成・削除・移動・属性変更は通常それなりの権限が必要です。
管理端末やDC上で PowerShell を開くことが多いですが、
RSAT が入っていれば管理端末からでも操作可能です。
1.3 DN の読み方
AD操作では Distinguished Name(DN) を頻繁に使います。
例:
OU=Sales,DC=contoso,DC=com
CN=Alice Wang,OU=Sales,DC=contoso,DC=com
意味はこうです。
-
DC= ドメイン構成要素 -
OU= 組織単位 -
CN= オブジェクト名
たとえば contoso.com ドメインの Sales OU にいる Alice Wang ユーザー、という感じです。
2. 最初に確認しておきたい基本情報
まずはドメイン情報を確認します。
Get-ADDomain
フォレスト情報:
Get-ADForest
現在のドメインコントローラ確認:
Get-ADDomainController -Filter *
特定DCだけ見たい場合:
Get-ADDomainController -Identity DC01
これで「今どこのADに向かってるのか」を最初に把握できます。
ここを曖昧にすると、後で「別ドメイン触ってた」が発生して心が折れます。
3. OU操作
3.1 OU一覧を取得する
Get-ADOrganizationalUnit -Filter *
見やすくするなら:
Get-ADOrganizationalUnit -Filter * | Select-Object Name, DistinguishedName
特定の名前だけ探す:
Get-ADOrganizationalUnit -Filter 'Name -like "*Sales*"'
3.2 OUを作成する
New-ADOrganizationalUnit -Name "Sales" -Path "DC=contoso,DC=com"
これで contoso.com 直下に Sales OU が作成されます。
子OUを作る例:
New-ADOrganizationalUnit -Name "Tokyo" -Path "OU=Sales,DC=contoso,DC=com"
3.3 OUの accidental deletion protection
OU削除時によく引っかかるのがこれです。
GUIでもPowerShellでも、「削除保護」 が有効だと削除できません。
確認や設定変更例:
Get-ADOrganizationalUnit -Identity "OU=Sales,DC=contoso,DC=com" -Properties ProtectedFromAccidentalDeletion
無効化する:
Set-ADOrganizationalUnit -Identity "OU=Sales,DC=contoso,DC=com" -ProtectedFromAccidentalDeletion $false
3.4 OUを削除する
削除保護を外してから実行します。
Remove-ADOrganizationalUnit -Identity "OU=Sales,DC=contoso,DC=com"
確認を出したくないなら:
Remove-ADOrganizationalUnit -Identity "OU=Sales,DC=contoso,DC=com" -Confirm:$false
中身が残っているOUはそのままでは削除できません。
先に子オブジェクト整理が必要です。
4. ユーザー操作
4.1 ユーザー一覧を取得する
Get-ADUser -Filter *
基本情報付きで見る:
Get-ADUser -Filter * -Properties DisplayName, Enabled | Select-Object SamAccountName, DisplayName, Enabled
特定ユーザーを確認:
Get-ADUser -Identity awang -Properties *
-Identity には通常以下が使えます。
SamAccountName- DistinguishedName
- SID
- GUID
4.2 特定条件のユーザーを探す
無効アカウント:
Search-ADAccount -AccountDisabled -UsersOnly
期限切れアカウント:
Search-ADAccount -AccountExpired -UsersOnly
パスワード期限切れ:
Search-ADAccount -PasswordExpired -UsersOnly
ロックアウト済み:
Search-ADAccount -LockedOut -UsersOnly
これは運用でかなり便利です。
「誰が詰まってるのか」を数秒で掴めます。
4.3 ユーザーを作成する
New-ADUser `
-Name "Alice Wang" `
-GivenName "Alice" `
-Surname "Wang" `
-SamAccountName "awang" `
-UserPrincipalName "awang@contoso.com" `
-Path "OU=Sales,DC=contoso,DC=com" `
-AccountPassword (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) `
-Enabled $true
よく使う追加オプション:
-ChangePasswordAtLogon $true-Department "Sales"-Title "Sales Representative"-EmailAddress "awang@contoso.com"
例:
New-ADUser `
-Name "Bob Tanaka" `
-SamAccountName "btanaka" `
-UserPrincipalName "btanaka@contoso.com" `
-Path "OU=Sales,DC=contoso,DC=com" `
-Department "Sales" `
-Title "Account Manager" `
-AccountPassword (ConvertTo-SecureString "TempPass123!" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true
4.4 ユーザー属性を変更する
部署変更:
Set-ADUser -Identity awang -Department "Marketing"
表示名変更:
Set-ADUser -Identity awang -DisplayName "Alice Wang"
メールアドレス変更:
Set-ADUser -Identity awang -EmailAddress "alice.wang@contoso.com"
複数属性まとめて変更:
Set-ADUser -Identity awang `
-Title "Senior Sales Rep" `
-Department "Sales" `
-OfficePhone "03-1234-5678" `
-Company "Contoso"
カスタム属性を触るなら -Add, -Replace, -Clear を使います。
Set-ADUser -Identity awang -Replace @{extensionAttribute1="VIP"}
消す:
Set-ADUser -Identity awang -Clear extensionAttribute1
4.5 パスワード変更
管理者がリセットする場合:
Set-ADAccountPassword -Identity awang -Reset -NewPassword (ConvertTo-SecureString "NewP@ssw0rd123!" -AsPlainText -Force)
次回ログオン時に変更強制:
Set-ADUser -Identity awang -ChangePasswordAtLogon $true
4.6 有効化・無効化
無効化:
Disable-ADAccount -Identity awang
有効化:
Enable-ADAccount -Identity awang
運用では退職者・休職者・一時停止ユーザー対応で非常によく使います。
4.7 ユーザーを移動する
たとえば部署変更でOU移動する場合:
Move-ADObject -Identity "CN=Alice Wang,OU=Sales,DC=contoso,DC=com" -TargetPath "OU=Marketing,DC=contoso,DC=com"
Get-ADUser と組み合わせると楽です。
Get-ADUser -Identity awang | Move-ADObject -TargetPath "OU=Marketing,DC=contoso,DC=com"
4.8 ユーザー削除
Remove-ADUser -Identity awang
確認を省略:
Remove-ADUser -Identity awang -Confirm:$false
本番ではまず削除より、次の流れが安全です。
- 無効化
- 退職者OUへ移動
- 一定期間保管
- その後削除
いきなり削除は、後で「メール復元したい」「権限確認したい」で泣きます。
5. グループ操作
5.1 グループ一覧取得
Get-ADGroup -Filter *
見やすく:
Get-ADGroup -Filter * | Select-Object Name, GroupScope, GroupCategory
特定グループ確認:
Get-ADGroup -Identity "Sales-Users"
5.2 グループ作成
セキュリティグループ作成:
New-ADGroup `
-Name "Sales-Users" `
-SamAccountName "Sales-Users" `
-GroupCategory Security `
-GroupScope Global `
-Path "OU=Groups,DC=contoso,DC=com"
配布グループなら -GroupCategory Distribution。
5.3 メンバー追加
1人追加:
Add-ADGroupMember -Identity "Sales-Users" -Members awang
複数追加:
Add-ADGroupMember -Identity "Sales-Users" -Members awang,btanaka,csato
5.4 メンバー確認
Get-ADGroupMember -Identity "Sales-Users"
ユーザーだけ見たいなら:
Get-ADGroupMember -Identity "Sales-Users" | Where-Object objectClass -eq "user"
5.5 メンバー削除
Remove-ADGroupMember -Identity "Sales-Users" -Members awang -Confirm:$false
5.6 ユーザーが属するグループを確認
Get-ADPrincipalGroupMembership -Identity awang
名称だけ見たいなら:
Get-ADPrincipalGroupMembership -Identity awang | Select-Object Name
6. コンピュータアカウント操作
ADではコンピュータもオブジェクトです。
そして地味に重要です。
6.1 一覧取得
Get-ADComputer -Filter *
OS情報付き:
Get-ADComputer -Filter * -Properties OperatingSystem, OperatingSystemVersion |
Select-Object Name, OperatingSystem, OperatingSystemVersion
6.2 特定PC確認
Get-ADComputer -Identity "PC01" -Properties *
ADのマシンアカウント名は通常 末尾に $ が付きますが、
Get-ADComputer -Identity ではふつう PC01 で扱えば十分です。
6.3 コンピュータ無効化
Disable-ADAccount -Identity "PC01$"
または:
Get-ADComputer -Identity "PC01" | Disable-ADAccount
6.4 コンピュータを移動する
Get-ADComputer -Identity "PC01" | Move-ADObject -TargetPath "OU=Workstations,DC=contoso,DC=com"
7. 一括処理
ここからがPowerShellの本領です。
7.1 CSVからユーザーを一括作成
CSV例:
Name,GivenName,Surname,SamAccountName,UserPrincipalName,Department,OU
Alice Wang,Alice,Wang,awang,awang@contoso.com,Sales,"OU=Sales,DC=contoso,DC=com"
Bob Tanaka,Bob,Tanaka,btanaka,btanaka@contoso.com,Sales,"OU=Sales,DC=contoso,DC=com"
PowerShell:
$users = Import-Csv .\users.csv
foreach ($user in $users) {
New-ADUser `
-Name $user.Name `
-GivenName $user.GivenName `
-Surname $user.Surname `
-SamAccountName $user.SamAccountName `
-UserPrincipalName $user.UserPrincipalName `
-Department $user.Department `
-Path $user.OU `
-AccountPassword (ConvertTo-SecureString "TempPass123!" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true
}
7.2 CSVからグループへ一括追加
CSV例:
SamAccountName,Group
awang,Sales-Users
btanaka,Sales-Users
PowerShell:
$members = Import-Csv .\group_members.csv
foreach ($m in $members) {
Add-ADGroupMember -Identity $m.Group -Members $m.SamAccountName
}
7.3 無効ユーザーを専用OUへ移動
Search-ADAccount -AccountDisabled -UsersOnly | ForEach-Object {
Move-ADObject -Identity $_.DistinguishedName -TargetPath "OU=DisabledUsers,DC=contoso,DC=com"
}
かなり便利ですが、本番ではいきなり実行せず、まず確認するのが安全です。
Search-ADAccount -AccountDisabled -UsersOnly | Select-Object Name, DistinguishedName
8. 退職者対応の定番フロー
現場感が強いので、これは覚えておくと便利です。
8.1 無効化
Disable-ADAccount -Identity awang
8.2 パスワードリセット
Set-ADAccountPassword -Identity awang -Reset -NewPassword (ConvertTo-SecureString "Disabled-Temp-2026!" -AsPlainText -Force)
8.3 グループ整理
Get-ADPrincipalGroupMembership -Identity awang |
Where-Object Name -ne "Domain Users" |
ForEach-Object {
Remove-ADGroupMember -Identity $_ -Members awang -Confirm:$false
}
8.4 退職者OUへ移動
Get-ADUser -Identity awang | Move-ADObject -TargetPath "OU=DisabledUsers,DC=contoso,DC=com"
8.5 説明欄に記録
Set-ADUser -Identity awang -Description "Disabled on 2026-03-22 due to employee offboarding"
これで、
「無効化しただけで権限残ってた」
みたいな事故を減らせます。
9. AD検索の実用パターン
9.1 特定部署のユーザー一覧
Get-ADUser -Filter 'Department -eq "Sales"' -Properties Department |
Select-Object Name, SamAccountName, Department
9.2 メールアドレス未設定ユーザー
Get-ADUser -Filter * -Properties mail |
Where-Object { -not $_.mail } |
Select-Object Name, SamAccountName
9.3 長期間ログオンしていないユーザー
Get-ADUser -Filter * -Properties LastLogonDate |
Where-Object { $_.LastLogonDate -lt (Get-Date).AddDays(-90) } |
Select-Object Name, SamAccountName, LastLogonDate
※ LastLogonDate はレプリケーションや更新タイミングの都合で、厳密さには注意が必要です。
9.4 特定OU配下のユーザー取得
Get-ADUser -Filter * -SearchBase "OU=Sales,DC=contoso,DC=com"
10. よくあるエラーと注意点
10.1. Identity が見つからない
Get-ADUser -Identity alice
これで見つからない場合、SamAccountName が違う、UPNと混同している、または別ドメインを見ている可能性があります。
まず検索で確認するのが安全です。
Get-ADUser -Filter 'Name -like "*Alice*"'
10.2 Access Denied
権限不足です。
OU作成、削除、ユーザー移動、属性変更などは権限が必要です。
10.3. OU削除できない
原因は主に2つです。
- 削除保護が有効
- 中身が残っている
削除保護確認:
Get-ADOrganizationalUnit -Identity "OU=OldDept,DC=contoso,DC=com" -Properties ProtectedFromAccidentalDeletion
10.4. -Filter と -Identity を混同する
-Identity は一意な対象を直接指定。
-Filter は条件検索です。
例:
Get-ADUser -Identity awang
Get-ADUser -Filter 'SamAccountName -eq "awang"'
11. 実務で役立つ安全な書き方
11.1 まず取得して確認
いきなり削除や移動は危険です。
悪い例:
Get-ADUser -Filter * | Remove-ADUser
これは冗談でも怖いです。
PowerShellが冗談を理解してくれないタイプだからです。
まず確認:
Get-ADUser -Filter * | Select-Object Name, SamAccountName
11.2 -WhatIf を使う
削除・移動・変更前にシミュレーションできます。
Get-ADUser -Identity awang | Move-ADObject -TargetPath "OU=Marketing,DC=contoso,DC=com" -WhatIf
11.3 エクスポートして証跡を残す
Get-ADUser -Filter * -Properties Department, Enabled |
Select-Object Name, SamAccountName, Department, Enabled |
Export-Csv .\ad_users_report.csv -NoTypeInformation -Encoding UTF8
監査や報告で役立ちます。
12 よく使う管理シナリオ別まとめ
12.1 新入社員追加
流れ:
- OU確認
- ユーザー作成
- 初期パスワード設定
- 必要グループへ追加
- 次回パスワード変更強制
例:
New-ADUser `
-Name "Chen Li" `
-SamAccountName "cli" `
-UserPrincipalName "cli@contoso.com" `
-Path "OU=Sales,DC=contoso,DC=com" `
-Department "Sales" `
-AccountPassword (ConvertTo-SecureString "Welcome123!" -AsPlainText -Force) `
-Enabled $true `
-ChangePasswordAtLogon $true
Add-ADGroupMember -Identity "Sales-Users" -Members cli
12.2 部署異動
流れ:
- 部署属性変更
- OU移動
- 不要グループ削除
- 新規グループ追加
Set-ADUser -Identity awang -Department "Marketing"
Get-ADUser -Identity awang | Move-ADObject -TargetPath "OU=Marketing,DC=contoso,DC=com"
Remove-ADGroupMember -Identity "Sales-Users" -Members awang -Confirm:$false
Add-ADGroupMember -Identity "Marketing-Users" -Members awang
12.3 退職処理
流れ:
- 無効化
- パスワードリセット
- グループ整理
- OU移動
- 記録追加
これはさっきのオフボーディング手順そのままです。
13. 通知
方法①:何もしない(普通)
自然に広がる(最も安全)
方法②:特定PCに強制
Invoke-GPUpdate -Computer "PC01" -Force
方法③:全体に近い形で強制
Get-ADComputer -Filter * | ForEach-Object {
Invoke-GPUpdate -Computer $_.Name -Force
}
疑似「全員通知」
14. PowerShellだけでAD管理するメリット
再現性がある
同じ作業を同じ形で何度も実行できます。
一括処理に強い
100人分の追加や修正が現実的になります。
証跡を残しやすい
スクリプトやCSVで履歴化しやすいです。
GUIより速いことが多い
慣れるとかなり速いです。
ADUCを10回クリックする前に終わることも珍しくありません。
まとめ
PowerShellでのAD操作を身につけると、
Active Directory 管理は単なる「画面作業」ではなく、
設計された運用 に変わります。
特に重要なのは次の5点です。
- OUを作る・移動する・削除する
- ユーザーを作る・変更する・無効化する
- グループを作る・メンバー管理する
- コンピュータアカウントを調査・整理する
- 一括処理と安全確認を組み合わせる
まずは次のコマンド群から手に馴染ませるのがおすすめです。
Get-ADUser -Filter *
New-ADUser ...
Set-ADUser ...
Disable-ADAccount ...
Get-ADGroupMember ...
Add-ADGroupMember ...
Get-ADOrganizationalUnit -Filter *
New-ADOrganizationalUnit ...
Move-ADObject ...
Get-ADComputer -Filter *
PowerShellだけでADを扱えるようになると、
「GUIでできることを置き換える」段階を超えて、
GUIでは面倒なことを当たり前に自動化できる ようになります。