【PowerShell】ユーザーのパスワード期限を一覧表示する方法

【PowerShell】ユーザーのパスワード期限を一覧表示する方法 PowerShell

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出力やメール通知との連携もあわせて活用しましょう。