Active Directory(AD)環境では、セキュリティポリシーによりユーザーのパスワードに有効期限が設定されていることが一般的です。期限切れ直前のユーザーを把握して、事前に通知や対策を行うには、パスワードの有効期限を一覧で取得するスクリプトが役立ちます。この記事では、PowerShellを使用してADユーザーのパスワード有効期限を確認する方法を紹介します。
前提条件
- Active Directoryモジュールがインストールされている(RSAT)
- PowerShellは管理者として実行
- 対象ドメインに対して接続できること
基本スクリプト(パスワード期限の計算)
Import-Module ActiveDirectory
$users = Get-ADUser -Filter {Enabled -eq $true -and PasswordNeverExpires -eq $false} `
-Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed"
$results = foreach ($user in $users) {
$expiry = [datetime]::FromFileTime($user.'msDS-UserPasswordExpiryTimeComputed')
[PSCustomObject]@{
UserName = $user.SamAccountName
DisplayName = $user.DisplayName
ExpiryDate = $expiry
DaysLeft = ($expiry - (Get-Date)).Days
}
}
$results | Sort-Object DaysLeft | Format-Table
msDS-UserPasswordExpiryTimeComputed
属性は、ユーザーごとのパスワード期限を示します。この値を FromFileTime()
で日付に変換し、現在の日付との差で残日数を算出しています。
期限が近いユーザーだけを抽出
$results | Where-Object { $_.DaysLeft -le 14 } | Format-Table
これにより、14日以内に期限切れとなるユーザーだけを抽出できます。
CSVとして出力する場合
$results | Export-Csv -Path "C:\Logs\PasswordExpiryReport.csv" -NoTypeInformation -Encoding UTF8
CSVファイルとして保存すれば、別システムへの連携やメール通知にも活用可能です。
ドメイン全体ではなく特定OUのみを対象にする
$ou = "OU=Users,DC=example,DC=com"
$users = Get-ADUser -SearchBase $ou -Filter * -Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed"
補足:パスワード期限を持たないユーザーの扱い
PasswordNeverExpires
が $true
のユーザーは期限を持たないため、一覧から除外することが一般的です。ただし、監査上は一覧化しておくのも有効です。
まとめ
PowerShellを使えば、Active Directoryユーザーのパスワード期限を一括で確認し、残日数まで把握することが可能です。定期的な監視や通知に組み込むことで、期限切れによるログイントラブルを未然に防ぐことができます。運用の一環として、CSV出力やメール通知との連携もあわせて活用しましょう。