Active Directoryを管理、運用していると特定のセキュリティグループに複数ユーザーをPowerShellで追加したり、削除したいというケースによく遭遇します。
さすがに「Active Directoryユーザーとコンピューター」スナップインからポチポチやるのは現実的ではないので、さくっとPowerShellスクリプトで解決してしまいましょう。
PowerShellのバージョンは5.1
ActiveDirectoryモジュールのバージョンはWindows 10 and Windows Server 2019 PowerShellを想定しています。
追加用スクリプト
Param(
[Parameter(Mandatory,
Position=0
)]
[String]
$GroupName
)
$ListPath = ".\user.txt"
$FSMOAddress = "10.0.10.1"
Get-Content -Path $ListPath |
ForEach-Object -Process {
Add-ADGroupMember -Identity $GroupName -Server $FSMOAddress -Members $_
}
インプットデータ
test
test2
利用例
PS C:\work> .\add-adgroupmeber.ps1 test-group
追加したいセキュリティグループ名を引数として渡して実行します。
説明
まずParam()で引数を利用できるようにしています。
さらにParameterで必須引数と指定する「Mandatory」と位置指定パラメーターとして「Position=0」をそれぞれ指定します。
最後に引数をString型と定義するために「[String]」を追記し、最後に引数を代入する変数「$GroupName」を指定します。
続いて、「$ListPath」でインプットデータの場所を指定し、「$FSMOAddress」でFSMOのアドレスを指定します。
これらを元にして、「Get-Content」でインプットデータを読み込み、ForEach-Objectでインプットデータの中身を1行ずつ読み取ります。
ループの中で「Add-ADGroupMember」を利用して、セキュリティグループにユーザーを追加しています。
削除用スクリプト
Param(
[Parameter(Mandatory,
Position=0
)]
[String]
$GroupName
)
$ListPath = ".\user.txt"
$FSMOAddress = "10.0.10.1"
Get-Content -Path $ListPath |
ForEach-Object -Process {
Remove-ADGroupMember -Confirm:$false -Identity $GroupName -Server $FSMOAddress -Members $_
}
利用例
PS C:\work> .\remove-adgroupmeber.ps1 test-group
※インプットデータは追加用スクリプトと同じなので省略します。
説明
追加用スクリプトとほぼ変わらないので、追加用スクリプトとの差分について説明します。
今回は特定のセキュリティグループからユーザーを削除するので「Remove-ADGroupMember」を利用します。
削除を行うことから、「Add-ADGroupMember」を「Remove-ADGroupMember」に変えただけでは、ユーザーアカウント毎に確認メッセージが表示されてしまいます。
なので、「-Confirm:$false」オプションで確認せずに実行させるようにしています。
まとめ
まずは不定期連載第1回目、ということで基礎中の基礎でありながらも頻繁に利用するようなスクリプトを紹介してみました。
こんな感じでちょっとした「ちょっとそこかいてくれ~」レベルのスクリプトを紹介していきますので、どうぞよろしくおねがいします。