Posted at

PowershellでActiveDirectoryを管理する(1)

More than 1 year has passed since last update.


はじめに

Active Directoryの管理作業をPowershellから実施してみる。

定常的な作業を自動化するために調査。

今回はユーザ作成とロック解除(とユーザ属性の変更)にまつわるコマンドについて記載する。


環境

PS> [System.Environment]::OSVersion

Platform ServicePack Version VersionString
-------- ----------- ------- -------------
Win32NT 6.3.9600.0 Microsoft Windows NT 6.3.9600.0

PS> $PSVersionTable

Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2

※WindowsServer 2012R2


PowershellにActiveDirectoryモジュールを導入する。

Windowsの機能追加を実施し、PowershellのActiveDirectory モジュールを導入する。


機能名を確認する。

RSAT-AD-PowerShell がActiveDirectroy のPowershell版管理ツール。

PS> Get-WindowsFeature

Display Name Name Install State
------------ ---- -------------
[X] Remote Server Administration Tools RSAT Installed
# ~ 中略 ~
[X] Role Administration Tools RSAT-Role-Tools Installed
[X] AD DS and AD LDS Tools RSAT-AD-Tools Installed
[ ] Active Directory module for Windows ... RSAT-AD-PowerShell Available


機能の導入

PS> Install-WindowsFeature -Name RSAT-AD-PowerShell

Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Active Directory module for Windows Power...


使ってみる


ユーザ作成

New-ADUser コマンドレットを使用する。

このコマンドレットは AccountPassword オプションを利用してユーザの初期パスワードを設定することができる。

しかし、パスワードポリシーに定める複雑性要件を満たせなかった時に「パスワード未設定且つ無効」のユーザが作成される。

このエラーハンドリングを行おうとすると、無効ユーザの削除が必要になる等煩雑だったので、

ユーザ作成処理とパスワード設定処理を分ける手順も記載する。


ユーザ作成と同時にパスワード設定

パスワードポリシーに抵触しないことが確実ならば、こちらのほうがスマート。

PS> New-ADUser ztest01 -Surname Test `

-GivenName User1 `
-Path "OU=TEST,OU=UNIT,OU=EXAMPLE,DC=example,DC=co,DC=jp" `
-UserPrincipalName "ztest01@example.co.jp" `
-AccountPassword (ConvertTo-SecureString -AsPlainText "password" -Force)


ユーザ作成とパスワード設定を分ける

シェルスクリプトでエラーハンドリング、リランしやすいのはこちら。

# ユーザ作成

PS> New-ADUser ztest01 -Surname Test `
-GivenName User1 `
-Path "OU=TEST,OU=UNIT,OU=EXAMPLE,DC=example,DC=co,DC=jp" `
-UserPrincipalName "ztest01@example.co.jp"
# ユーザ取得
PS> $user = Get-ADUser -Filter {SamAccountName -eq "ztest01"}

# パスワード設定
PS> $user | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString -AsPlainText "password" -Force)

# 有効化
PS> $user | Set-ADUser -Enabled $true


New-ADUser のよく使うオプション

オプション
説明

AccountPassword
初期パスワードを指定(SecureStting)

CannotChangePassword
アカウントパスワードの変更を可能にするかどうかを指定

ChangePasswordAtLogon
次回ログオン時にパスワードを変更させるかどうかを指定

DisplayName
表示名を指定

EmailAddress
メールアドレスを指定

GivenName
名を指定

PasswordNeverExpires
アカウントパスワードの期限切れを無効にするかどうかを指定

Path
オブジェクトを作成する組織単位(OU)またはコンテナのX.500パスを指定

Surname
姓を指定

UserPrincipalName
ユーザープリンシパル名を指定


ユーザロック解除とよくある後処理

パスワード失念によるユーザロック解除を想定して記載。

# ユーザ取得

PS> $user = Get-ADUser -Filter {SamAccountName -eq "ztest01"}

# ユーザロック解除
PS> $user | Unlock-ADAccount

# 新規パスワード設定
PS> $user | Set-ADAccountPassword -NewPassword (ConvertTo-SecureString -AsPlainText "password" -Force)

# 次回ログオン時にパスワード変更を強制
PS> $user | Set-ADUser -ChangePasswordAtLogon $true


おわりに

次回はPowershellでGroup管理を予定。