【Windows】リモート接続だとパスワード有効期限が通知されない
事象
前提や起きている環境・事象をまとめると下記の通りです。
- Windowsのパスワードは有効期限が設定されていて、定期的にパスワードを変更しないといけない
- 物理的なPCを直接操作している分には、パスワード有効期限がそろそろ切れる通知が表示される
- リモートデスクトップ接続していると、パスワード有効期限がそろそろ切れる通知が表示されない
- パスワード有効期限が切れると、リモートでパスワードが変更できなくなる
- もちろんながら有効期限を無制限にはできない
対策
環境や設定は変更できないという前提で、無理やり気付けるようにします。
見た目とかは完全無視で簡単にサクッとスクリプトを作ります。
※スケジュール管理しろよという声が聞こえる気がしますが、面倒くさいのと仕組み化したいので…
PowerShellファイル
任意のフォルダに下記ファイルを保存します。
※例としてC:\tools\パスワード有効期限チェック.ps1に保存
※文字コードはShift-JIS(SJIS)で保存
Add-Type -AssemblyName System.Windows.Forms
$user = net user /domain $env:USERNAME | Select-String "パスワード有効期間"
$expiryDate = [datetime]($user -split " +")[1]
$daysRemaining = ($expiryDate - (Get-Date)).Days
if ($daysRemaining -le 14) {
[System.Windows.Forms.MessageBox]::Show("パスワードの期限まであと $daysRemaining 日です。")
}
if ($daysRemaining -le 14) {で14日以内になったら通知が出るようにしています。
日数はお好きに調整ください。
バッチファイル
Windowsボタン+R を押して、shell:startupと入力して、スタートアップフォルダを開き、下記ファイルを保存します。
※例として%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\パスワード有効期限チェック.batに保存
※文字コードはShift-JIS(SJIS)で保存
@echo off
powershell -ExecutionPolicy Unrestricted -File "C:\tools\パスワード有効期限チェック.ps1"
-Fileの後ろのパスは上記PowerShellのパスを入力してください。
結果
実際にパスワード有効期限が2週間を切ってPCを起動するとこんな感じの画面が表示されれば成功です。
備考
自分が気付けばいいので、エラーハンドリングのくそもないです。
プライベートで有効期限を設定している人は…超レア中のレアだと思うので、一応セキュリティ意識高い会社のPCだろうなと思いドメインアカウント前提のスクリプトです。
もし「指定されたドメインがないか、またはアクセスできません」等、ドメインなんちゃらとエラーが出ているならnet user /domain $env:USERNAMEをnet user $env:USERNAMEに変更してみてください。
まとめ
パスワード有効期限が切れた後、リモート接続できないあの絶望はもう味わいたくないです。
他の人に迷惑かかってしまいますからね…。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。