Active Directoryで期限切れのユーザーパスワードを延長する方法

Active Directory(AD)のパスワードポリシーは、基本的にユーザーのパスワードに最大有効期間を設定します。有効期間が過ぎると、パスワードは期限切れとしてマークされ、ユーザーは次回ログイン時にパスワードを変更する必要があります。これは、特にVPNやRDS経由で接続している場合、パスワードをリセットできないなど、少々面倒です。幸いなことに、「パスワードを無期限にする」オプションをオンにしなくても、有効期限を延長する方法があります。つまり、セキュリティポリシーは遵守しつつ、少し余裕を持たせることができます。

ここで頼りになるのがPowerShellです。PowerShellを使えば、パスワードの有効期限を確認し、必要に応じて日付を調整できます。これにより、ユーザーが予期せずロックアウトされたり、必要のない大量のパスワードリセットを強いられたりすることがなくなります。

Active Directory のパスワード有効期限を修正する方法

現在のパスワードの有効期限を確認する

パスワードの有効期限が近づいているか、すでに期限切れになっているかを知ることが最初のステップです。このコマンドは、ユーザーのパスワードの最終設定日、有効期限、そして有効期限切れかどうかに関する情報を取得します。

Get-ADUser -Identity e.herrmann -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, PasswordNeverExpires, PasswordExpired | Select-Object -Property Name, PasswordLastSet, PasswordNeverExpires, PasswordExpired, @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

つまり、パスワードが期限切れ( )なのか、まだ有効なのかを一目で確認できますPasswordExpired=True。重要なのはmsDS-UserPasswordExpiryTimeComputedです。これは、パスワードポリシーに基づいて有効期限を示すものです。

パスワードの最終設定日を確認する

パスワードの最終変更日を確認します。これは有効期限の計算に影響します。次のコマンドを使用してください。

Get-ADUser e.herrmann -Properties pwdLastSet | select SamAccountName, @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}}

pwdLastSet は日付を Windows FileTime 形式(1601 年からのミリ秒数)で保存することに注意してください。パスワードが設定されていない場合は0 、現在にリセットされた場合は-1 になることもあります。これは当然のことですが、Windows は本来よりも複雑な処理を強いられるためです。

パスワードの最終設定日を調整する

パスワードの有効期限を延長またはリセットしたい場合は、 pwdLastSet を変更します。0 に設定すると最終設定日がリセットされ(「パスワードが設定されていない」状態になります)、-1設定すると有効期限のカウントダウンが現在に更新されます。設定方法は以下の通りです。

Set-ADUser e.herrmann -Replace @{pwdLastSet='0'} # resets password date Set-ADUser e.herrmann -Replace @{pwdLastSet='-1'} # resets to current time

設定によっては、両方を続けて実行すると有効期限を延長したり、期限切れのアカウントを修正したりできる場合があります。なぜうまくいくのかは分かりませんが、あるドメインでは数回の試行で解決しましたが、別のドメインでは再起動するだけで解決しました。

変更を確認し、有効期限を確認します

その後、先ほどのチェックを再度実行し、有効期限が変更されたか、パスワードが期限切れとしてマークされていないことを確認してください。これは、パスワードの有効期限が予期せず切れてしまい、ユーザーが困っている場合に特に役立ちます。問題がなくなるまで、いくつかのコマンドをRPで実行してください。

もう一つ注意すべき点があります。ADでは有効期限を直接指定することはできません。システムは最終設定日とパスワードポリシーに基づいて有効期限を計算します。そのため、pwdLastSetの値を調整するのが、有効期限に最も近い方法です。

このトリックは、新しいポリシーを適用する準備をしているものの、すべてのユーザーを一度に邪魔したくない場合に特に便利です。いわば、ポリシーを完全に無効にすることなく、ユーザーに延長カードを渡すようなものです。

注意: これは、恒久的な修正というよりは時間を稼ぐためのハックのようなものです。しかし、もっと深刻な変更を加える前に、それだけで十分な場合もあります。

まとめ

  • Get-ADUserを使用してパスワードの有効期限を確認します。
  • msDS-UserPasswordExpiryTimeComputed有効期限を確認するために使用します。
  • 最後のパスワード変更を で確認しますpwdLastSet
  • 最後に設定した日付を調整してSet-ADUserpwdLastSet有効期限を延長します。
  • 固定の有効期限を設定することはできず、最終変更日のみを変更できることに留意してください。

まとめ

これで、不要なパスワードリセットや予期せぬ事態を回避できるといいですね。ちょっとした回避策ですが、驚くほど効果的です。特に、ユーザーが期限切れ通知に不意を突かれた時などに効果的です。AD属性の変更にはご注意ください。変更後は必ず二重チェックを行ってください。これで、誰かの頭痛の種が数時間でも軽減されることを願っています。