ADユーザーのパスワード変更日をPowerShellで取得してCSV出力

Windows
記事内に広告が含まれています。

はじめに

社内のアカウント管理で、だれがいつパスワードを変更したかを調べるのに苦労したことはないでしょうか?
Active Directory(AD)の管理画面からユーザーを一人ずつクリックして確認する作業は、人数が多いと膨大な時間がかかってしまいます。

私も以前、セキュリティ監査の前に全社員のパスワード設定状況を急ぎで確認する必要があり、手作業での限界を感じて途方に暮れたことがありました。
しかし、PowerShellで簡単なスクリプトを作成したところ、数百人のデータをわずか数秒でCSVファイルに書き出すことができ、業務を大幅に効率化できました。

この記事では、PowerShellを使って、ADユーザーの「最後にパスワードを変更した日(PasswordLastSet)」をまとめて取得してCSV出力する手順を解説します。

この記事を読めば、めんどうなユーザー情報の確認作業を自動化できるようになり、セキュリティの棚卸し作業がとても楽になります。
まずは実際のスクリプトを確認し、テスト環境で動かしてみましょう。

パスワードの定期的な棚卸しが必要な理由

多くの企業では、セキュリティを保つために、パスワードの変更ルールを定めています。
しかし、長期間パスワードが変更されていない古いアカウントは、不正アクセスの標的になりやすく危険です。

定期的に全員のパスワード変更日を確認し、「長期間変更されていないアカウントがないか」
「すでに使われていない退職者のアカウントが残っていないか」
をチェックすることは、社内の安全を守るためにとても大切です。
PowerShellを使えば、この確認作業を自動でおこなうことができます。

パスワード変更日を取得・出力するPowerShellスクリプト

ADからユーザー情報を取得するには、「Get-ADUser」というコマンドを使います。
以下は、有効になっているすべてのユーザーの「名前」「ユーザー名」「最後にパスワードを変更した日」
を取得し、CSVファイルに保存するスクリプトです。

# --------------------------------------------------
# ADユーザーのパスワード変更日取得スクリプト
# --------------------------------------------------

# 保存するCSVファイルのパスを指定します
$CsvPath = "C:\Scripts\AD_PasswordLastSet.csv"

# ADモジュールがインストールされていることを確認します
if (Get-Module -ListAvailable -Name ActiveDirectory) {
    # 有効なユーザーのみを対象に情報を取得します
    $Users = Get-ADUser -Filter 'Enabled -eq $true' -Properties PasswordLastSet
    
    # 必要な項目だけを選んでCSVファイルに書き出します
    $Users | Select-Object Name, SamAccountName, PasswordLastSet | 
        Export-Csv -Path $CsvPath -Encoding UTF8 -NoTypeInformation
        
    Write-Host "CSVファイルの出力が完了しました: $CsvPath"
} else {
    Write-Warning "Active Directoryモジュールが見つかりません。リモートサーバー管理ツール(RSAT)を確認してください。"
}

このスクリプトでは、Get-ADUserコマンドに -Properties PasswordLastSet というオプションを付けています。
標準の設定では、パスワード変更日の情報は取得できないため、このオプションで明示的に指定してあげる必要があります。

運用現場で役立つカスタマイズ方法

基本のスクリプトを少し書き換えることで、さらに便利な使い方ができます。
ここでは2つのカスタマイズ例を紹介します。

特定の組織単位(OU)だけで絞り込んで取得する

全社ではなく、特定の部署(OU)に所属するユーザーだけを調べたいときは、-SearchBase オプションを使います。

# 営業部のOU内だけを検索する例
$TargetOU = "OU=Sales,DC=example,DC=com"
Get-ADUser -Filter 'Enabled -eq $true' -SearchBase $TargetOU -Properties PasswordLastSet

これにより、特定の部署だけで一時的なパスワードのチェックをおこなうときなどに、余計なデータを除外してスムーズに作業ができます。

パスワード変更日から一定期間が過ぎているユーザーを探す

たとえば、最後に変更した日から90日以上が経過しているユーザーを抽出して見つけたいときは、日付の計算を追加します。

# 90日前より過去の日付を計算します
$LimitDate = (Get-Date).AddDays(-90)

# 90日以上パスワードを変更していないユーザーを抽出します
Get-ADUser -Filter 'Enabled -eq $true' -Properties PasswordLastSet |
    Where-Object { $_.PasswordLastSet -lt $LimitDate } |
    Select-Object Name, SamAccountName, PasswordLastSet |
    Export-Csv -Path $CsvPath -Encoding UTF8 -NoTypeInformation

このカスタマイズをおこなうことで、「パスワード変更を忘れている人」のリストを自動で作成し、注意を促す連絡に活用できます。

以下に、それぞれのコマンドの役割を表にまとめました。

コマンド/オプション役割使う場面
-Filter ‘Enabled -eq $true’有効なアカウントのみに絞り込む不要になったアカウントを除外したいとき
-Properties PasswordLastSetパスワード変更日を情報に含めるパスワードの棚卸しをおこないたいとき
-SearchBase検索する範囲(OU)を限定する部署やグループごとにデータを分けたいとき

この表を参考に、必要な条件を組み合わせてスクリプトをカスタマイズしてみてください。

まとめ

PowerShellを使ったADユーザーのパスワード変更日の取得について解説しました。
今回の重要なポイントは以下の3点です。

  • パスワードの定期的な棚卸しは、不要なアカウントの放置を防ぐために必須であること
  • Get-ADUserコマンドに -Properties PasswordLastSet を指定してデータを取得すること
  • OU指定や日付の条件を追加することで、目的に合わせたユーザーリストを自動で作成できること

手作業でおこなうと何時間もかかる作業が、PowerShellを使うことで一瞬で終わります。
まずはテスト環境から試してみて、日々の運用管理に役立ててください。

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。
OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。
また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。
この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。
すべての操作は自己責任で行ってください。

もし、記事の中で間違いやご指摘があればコメントを頂けると大変ありがたいです。
最後までお読みいただきありがとうございました。
またお会いしましょう!

コメント

タイトルとURLをコピーしました