0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellだけでAD操作まとめ

0
Last updated at Posted at 2026-03-21

はじめに

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-ADUser
  • New-ADUser
  • Set-ADUser
  • Remove-ADUser
  • Get-ADGroup
  • Add-ADGroupMember
  • Get-ADOrganizationalUnit
  • New-ADOrganizationalUnit
  • Move-ADObject
  • Get-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

本番ではまず削除より、次の流れが安全です。

  1. 無効化
  2. 退職者OUへ移動
  3. 一定期間保管
  4. その後削除

いきなり削除は、後で「メール復元したい」「権限確認したい」で泣きます。


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 新入社員追加

流れ:

  1. OU確認
  2. ユーザー作成
  3. 初期パスワード設定
  4. 必要グループへ追加
  5. 次回パスワード変更強制

例:

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 部署異動

流れ:

  1. 部署属性変更
  2. OU移動
  3. 不要グループ削除
  4. 新規グループ追加
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 退職処理

流れ:

  1. 無効化
  2. パスワードリセット
  3. グループ整理
  4. OU移動
  5. 記録追加

これはさっきのオフボーディング手順そのままです。


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では面倒なことを当たり前に自動化できる ようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?