PowerShell
ActiveDirectory

PowershellでActiveDirectoryを管理する(1)

はじめに

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管理を予定。