Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

この記事では、PowerShellを使用してActive Directoryユーザーアカウントのパスワードがいつ期限切れになるかを確認する方法、パスワードが期限切れにならないように設定する方法(PasswordNeverExpires = True)を示します。 )、パスワードを変更するように事前にユーザーに通知します。

ドメイン内のユーザーパスワードの有効期限が切れている場合、アカウントはロックされませんが、ユーザーが有効期限の切れたパスワードを新しいパスワードに変更するまで、ドメインリソースへのアクセスに使用することはできません。ほとんどの場合、リモートユーザーは、標準のツールを使用してパスワードを変更できないため、パスワードの有効期限が切れているという問題に遭遇します。

ドメインでのユーザーパスワードの有効期限、変更が必要な頻度(最大パスワードの有効期限)、および複雑さの要件は、ADドメインのパスワードポリシーで設定されます。これらのパラメータは、デフォルトのドメインポリシーまたはきめ細かいパスワードポリシーで設定されます。

次のPowerShellコマンドを使用して、ドメイン内の現在のパスワード有効期限ポリシー設定を取得できます。

Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge

この例では、ドメイン内のユーザーパスワードの最大有効期間は60日です。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

Active Directoryでユーザーパスワードの有効期限を取得するにはどうすればよいですか?

ネットユーザーを使用すると、コマンドプロンプトでパスワードの有効期限と前回変更された日付を確認できます。 コマンド:

net user jsmith /domain

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

必要な情報は次の行にあります:

  • パスワードの最終設定—2020年9月9日午前9時23分59秒
  • パスワードの有効期限が切れます — 1/7/2021 9:23:59 AM
  • パスワード変更可能—2020年9月10日午前9時23分59秒
すべてのユーザーのパスワードの有効期限を取得できます。そのためには、ユーザーアカウントを持つADコンテナに対する管理者権限や委任された権限は必要ありません。

ADアカウントの設定を表示するには、さまざまなADオブジェクト属性の値を取得できる特別なPowerShell for Active Directoryモジュールを使用します(Windows10およびWindowsServer 2012 R2 /2016にADPowerShellモジュールをインストールしてインポートする方法を参照してください)。 )。

Get-ADUserコマンドレットを使用すると、ユーザーのパスワードが最後に変更された日付を表示し、PasswordNeverExpiresオプションが設定されているかどうかを確認できます。

get-aduser jsmith -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

  • PasswordLastSet 最後にパスワードを変更した日時です。
  • PasswordNeverExpires Trueを返します ユーザーパスワードの有効期限が切れない場合;
  • PasswordExpired –ユーザーパスワードの有効期限が切れている場合は、 Trueを返します。 、パスワードの有効期限が切れていない場合は、 Falseを返します。 。
グラフィカルなMMCスナップインActiveDirectoryユーザーとコンピューター(dsa.msc)で、最後にパスワードが変更された時刻を確認できます。 )。これを行うには、ユーザープロパティを開き、[属性エディター]タブに移動して、 pwdLastSetの値を確認します。 属性。

ただし、ご覧のとおり、MMCスナップインには、パスワードが変更された時刻のみが表示されます。パスワードの有効期限がいつ切れるのかは明確ではありません。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

最後に変更された時刻ではなく、パスワードの有効期限を取得するには、特別に作成されたAD属性を使用します: msDS-UserPasswordExpiryTimeComputed 。 msDS-UserPasswordExpiryTimeComputedの値は、最後にパスワードが変更された日付とドメインパスワードポリシーに基づいて自動的に計算されます。

UserPasswordExpiryTimeComputed パラメータはTimeStamp形式で日付を返すため、FromFileTimeを使用します 人間が読める形式の値に変換する関数:

Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}

したがって、ユーザーパスワードの有効期限を取得しました。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

msDS-UserPasswordExpiryTimeComputedの値が0の場合、pwdLastSetが空(null)または0(パスワードが変更されていない)であることを意味します。

ADの特定のコンテナー(OU)からすべてのユーザーのパスワードの有効期限を取得するには、次のPowerShellスクリプトを使用できます。

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet
を選択します

これにより、アクティブユーザーのリスト、パスワードが最後に変更された日時のテーブルが作成されます。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

パスワードの有効期限が切れているユーザーのリストのみを表示できます:

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}

ADユーザーのパスワードを無期限に設定するにはどうすればよいですか?

アカウントに永続的なパスワードを設定する場合は、パスワードが期限切れにならないを確認してください。 ADのユーザープロパティのオプション(UserAccoutControl属性のビット値の1つです)。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

または、ユーザー属性を設定して、PowerShellでこのオプションを有効にすることができます:

Get-ADUser jsmith | Set-ADUser -PasswordNeverExpires:$True

テキストファイルのリストから、複数のユーザーに対して一度に[​​パスワードを無期限にする]オプションを設定できます。

$users=Get-Content "C:\PS\users_password_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}

通常のパスワード変更オプションを無効にしたすべてのユーザーのリストを表示できます:

Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } |  Select-Object DistinguishedName,Name,Enabled |ft

ActiveDirectoryパスワードの有効期限通知ポリシー

Windowsには、パスワードを変更する必要があることをユーザーに通知できる特別なグループポリシーパラメーターがあります。

ポリシーはインタラクティブログオン:有効期限が切れる前にユーザーにパスワードの変更を促すと呼ばれます。 [GPO]セクションの下にあります:[コンピューターの構成]->[ポリシー]->[Windowsの設定]->[セキュリティの設定]->[ローカルポリシー]->[セキュリティのオプション]。

デフォルトでは、ポリシーはローカルのWindows設定で有効になっており、パスワードの有効期限が切れる5日前に通知が表示され始めます。ユーザーにパスワード変更通知が表示される日数を変更できます。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

このポリシーを有効にした後、ユーザーのパスワードの有効期限が切れると、ユーザーがログオンするたびにパスワードを変更するための通知がトレイに表示されます。

Consider changing your password
Your password will expire in xx days.

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

5日以内に有効期限が切れた場合にパスワードを変更するように求めるダイアログウィンドウを自動的に表示する単純なPowerShellスクリプトを使用することもできます。

Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password expires in "+ $timediff + " days!`nDo you want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}

ユーザーが[はい]をクリックすると、Ctrl+Alt+Delを押した後に表示されるWindowsセキュリティウィンドウが表示されます。 またはCtrl+Alt+End (RDP / RDS接続の場合)。

ADユーザーパスワードの有効期限が近づいたときのパスワード変更通知

このスクリプトは、PowerShellforADモジュールがユーザーのコンピューターにインストールされていることを示しています。 RSATがインストールされていなくても使用できます。 「RSATをインストールせずにADモジュールを使用する」の記事を確認してください。

PSスクリプトの自動起動を有効にするか、GPOログオンスクリプトとして実行します。

Powershellを介したパスワードの有効期限の電子メール通知

パスワードの有効期限をメールでユーザーに通知する場合は、次のPowerShellスクリプトを使用できます。

$Sender = "info@woshub.com"
$Subject = 'Important! Your password expires soon!'
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. If you have other questions, contact the HelpDesk.'
$smtpserver ="smtp.woshub.com"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=woshub,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}

スクリプトは、パスワードの有効期限が近づいているすべてのActiveDomainユーザーをチェックします。パスワードの有効期限が切れる7日前に、ユーザーはADで指定されたアドレスに電子メールを送信し始めます。パスワードが変更されるか、有効期限が切れるまで、メールが送信されます。

管理者は、Set-ADAccountPasswordコマンドレットを使用してユーザーパスワードの変更を強制できます。

このPowerShellスクリプトは、ドメイン内の任意のコンピューター/サーバーで定期的に実行します(タスクスケジューラを使用する方が簡単です)。もちろん、SMTPサーバーの許可された送信者リスト(認証なしで電子メールを送信できます)に電子メールを送信しているホストのIPアドレスを追加する必要があります。


  1. Windows10のパスワードを変更する方法

    Windowsオペレーティングシステムは、ユーザーのセキュリティを非常に重要視しています。そのため、OSのすべてのイテレーションには、ユーザーアカウントを保護するために使用できる無数のツールが付属しています。ほとんどのユーザーは、Windows上のユーザーアカウントをパスワードで保護することを選択するだけです。パスワードは信頼性が高く安全であるだけでなく、利用可能な最も簡単なアカウント保護方法でもあります。これはすべて、Windows 10にも当てはまります。これは、Windowsオペレーティングシステムの長い製品ラインの中で最新かつ最高のものです。 Windows 10ユーザーには、他の多く

  2. Windows 7 のパスワードを変更する方法

    Windows 7 システムで個人データを保護するには、パスワードのセキュリティが非常に重要です。適切なログイン パスワードは、重要なデータを取得するためにコンピュータにアクセスしようとする人に対する防御の最前線です。 Windows 7 パスワードの変更 定期的に行う必要があります。 Windows 7 でログイン パスワードを簡単に変更する方法は次のとおりです 1. [スタート] をクリックし、[コントロール パネル] を選択します。 2. コントロール パネルで、[ユーザー アカウントとファミリー セーフティ] をクリックします。 3. ユーザー アカウントの下に、[Win