Windowsのパスワード有効期限は、最後にパスワードを設定した日時と、適用される「パスワードの有効期間」で決まります。net user ユーザー名 /expires:日付が変更するのはアカウント自体の有効期限であり、パスワードの期限ではありません。本記事では、CMDでの確認、ローカルPCの有効期間設定、ドメイン環境での確認先を区別して説明します。
この記事の設定例は、管理権限と変更許可がある環境向けです。会社・学校の端末では管理者に確認し、まず変更前の値と影響するユーザーを記録してください。パスワードの期間を短くすると、既にその期間を過ぎたパスワードが期限切れになる可能性があります。
最初に確認:パスワード期限・アカウント期限・アカウントの種類
- パスワードの有効期限:認証に使うパスワードをいつまで使用できるか。ローカルでは
net accountsの最大有効期間や、ユーザーごとの無期限設定が関係します。 - アカウントの有効期限:そのアカウントでサインインできる期間。
net user /expiresはこの設定です。/expires:neverもパスワード無期限化ではありません。 - ローカルアカウント:そのPCで管理します。以下の
net accounts /maxpwageの変更例は、ドメインコントローラーではないローカルPCを対象とします。 - Active Directory Domain Services(AD DS):ドメインのポリシーと、対象ユーザーに適用される細かい設定が優先されます。PCのローカル設定だけではドメインユーザーの期限は変更できません。
- Microsoftアカウント・Microsoft Entra ID:クラウド側の管理が必要です。ローカル向けコマンドでオンラインアカウントの期限やWindows HelloのPINを変更する手順ではありません。
定期変更だけでセキュリティが高まるとは限りません。Microsoftは、現代的な対策を備えた環境では一律の期限設定を前提とせず、Microsoft 365のクラウド専用アカウントでは無期限を推奨しています。ただし、既存の組織ポリシーを自己判断で解除しないでください。MFA、不正なサインインの検知、漏えい・弱いパスワードへの対策、業務要件を含めて管理者が判断します。参考:Microsoftのパスワード推奨事項、Windowsの最大パスワード有効期間。
コマンドプロンプトを開く方法
コマンドプロンプトを開くことは、Windows環境で様々な管理タスクを行うための基本ステップです。以下の手順でコマンドプロンプトを開くことができます。
Windows 10/11でのコマンドプロンプトの開き方
スタートメニューから開く方法
- 「スタート」ボタンをクリックします。
- 検索バーに「cmd」または「コマンドプロンプト」と入力します。
- 検索結果に表示される「コマンドプロンプト」をクリックします。
ショートカットキーを使用する方法
- キーボードの「Windowsキー」を押しながら「R」キーを押します。
- 「ファイル名を指定して実行」ダイアログボックスが表示されます。
- 「cmd」と入力し、「OK」ボタンをクリックします。
管理者権限でコマンドプロンプトを開く方法
多くの管理タスクを実行するには、管理者権限が必要です。以下の手順で管理者権限でコマンドプロンプトを開きます。
スタートメニューから開く方法
- 「スタート」ボタンを右クリックします。
- メニューから「ターミナル(管理者)」「Windows PowerShell(管理者)」などを選びます。表示名はWindowsのバージョンで異なります。
- ユーザーアカウント制御(UAC)の確認画面で許可を確認して「はい」をクリックします。PowerShellが開いた場合は
cmdと入力し、Enterキーを押してCMDに切り替えます。
ショートカットキーを使用する方法
- キーボードの「Windowsキー」を押しながら「X」キーを押します。
- メニューから「ターミナル(管理者)」「Windows PowerShell(管理者)」などを選びます。表示名はWindowsのバージョンで異なります。
- ユーザーアカウント制御(UAC)の確認画面で許可を確認して「はい」をクリックします。PowerShellが開いた場合は
cmdと入力し、Enterキーを押してCMDに切り替えます。
これで、コマンドプロンプトを管理者権限で開くことができます。次に、具体的なコマンドを使ってユーザーのパスワード有効期限を設定していきます。
net userコマンドの基本
net userコマンドは、Windowsのユーザーアカウント管理に使用される非常に便利なツールです。ここでは、net userコマンドの基本的な使い方を説明します。
net userコマンドの概要
net userコマンドは、ユーザーアカウントの作成、変更、削除、表示を行うためのコマンドです。このコマンドを使用することで、管理者はユーザーのパスワードやアカウント情報を簡単に管理することができます。
基本的な構文
net userコマンドの基本的な構文は以下の通りです:
net user <ユーザー名> [<パスワード> | *] [/domain]<ユーザー名>: 操作を行いたいユーザーの名前を指定します。<パスワード>: 新しいパスワードを指定します。*を使うと、パスワード入力を求められます。/domain: コンピューターが所属する主ドメインのドメインコントローラーで操作します。ローカルユーザーと同名でも別のアカウントなので、対象を取り違えないでください。
ユーザー情報の表示
特定のユーザーの情報を表示するには、以下のコマンドを使用します:
net user <ユーザー名>例えば、ユーザー “john” の情報を表示するには以下のように入力します:
net user john新しいユーザーの作成
新しいユーザーアカウントを作成するには、以下のコマンドを使用します:
net user <ユーザー名> * /add新規作成が必要で、作成の許可がある場合の例です。有効期限の確認だけなら作成する必要はありません。パスワードをコマンドに直接書かず、* で表示されない入力プロンプトを使います:
net user mary * /addユーザーのパスワード変更
既存のユーザーのパスワードを変更するには、以下のコマンドを使用します:
net user <ユーザー名> *管理者が対象ユーザーのパスワードを設定し直す必要がある場合の例です。これは期限設定とは別操作で、保存済み資格情報などに影響することがあります。期限確認のために実行する必要はありません:
net user john *これで、net userコマンドの基本的な使い方を理解することができました。次に、ユーザーのパスワード有効期限を確認する方法について説明します。
ユーザーのパスワード有効期限を確認する
ユーザーのパスワード有効期限を確認することは、セキュリティ管理の一環として重要です。以下の手順でコマンドプロンプトを使用してユーザーのパスワード有効期限を確認する方法を説明します。
net userコマンドを使用したパスワード有効期限の確認
特定のユーザーのパスワード有効期限を確認するために、以下のコマンドを使用します:
net user <ユーザー名>例えば、ユーザー “john” のパスワード有効期限を確認するには、以下のように入力します:
net user johnコマンドの実行結果の確認
コマンドを実行すると、ユーザー情報が表示されます。以下は表示項目を説明するための架空の例で、実機で取得した結果ではありません:
ユーザー名 john
フル ネーム
コメント
ユーザーのコメント
国/地域 コード 000 (既定値)
アカウントの有効期限 無期限
最後に設定されたパスワード 2023/06/10 10:00:00
パスワード有効期限 2024/06/10 10:00:00
パスワード変更可 2023/06/11 10:00:00
パスワード必要 はいここで重要な項目は「パスワード有効期限」です。このフィールドにはユーザーのパスワードの有効期限が表示されます。
AD DSのドメインユーザーを確認する場合は、接続先を確認したうえで次の読み取りコマンドを使います。ドメインコントローラーに到達できない環境では取得できません。
net user john /domain「無期限」と表示される場合は、ユーザー単位の例外か、適用ポリシーが無期限なのかを切り分けます。表示名や日時形式はWindowsの言語・地域設定で変わります。
例:パスワード有効期限の表示
同じ出力の「アカウントの有効期限」と「パスワード有効期限」は別項目です。次の例では前者だけが無期限です(架空の出力例):
ユーザー名 john
フル ネーム
コメント
ユーザーのコメント
国/地域 コード 000 (既定値)
アカウントの有効期限 無期限
最後に設定されたパスワード 2023/06/10 10:00:00
パスワード有効期限 2024/06/10 10:00:00
パスワード変更可 2023/06/11 10:00:00
パスワード必要 はいこの情報により、管理者はパスワード有効期限がいつ切れるかを確認できます。
次に、ユーザーのパスワード有効期限を設定する具体的な手順について説明します。
ユーザーのパスワード有効期限を設定する
まず現在のローカルポリシーを確認する
以下は設定を変更しないコマンドです。「パスワードの有効期間」または Maximum password age、最小有効期間などを記録します。
net accountsCMDで最大有効期間を設定する
次の例は、ローカルPCのパスワードポリシーを90日に変更します。john一人だけの設定ではなく、そのポリシーの対象となるローカルユーザー全体に影響します。90日は操作例であり、推奨値を一律に指定するものではありません。対象と承認済みの値を確認してから、管理者のCMDで実行します。
net accounts /maxpwage:90/maxpwageはパスワードを使える最大日数です。日数指定は1~999で、既存の最小有効期間より大きい値を選んでください。詳細は対象PCでnet help accountsも確認します。- 任意の日付をユーザー一人に直接設定するコマンドではありません。最終パスワード設定日時と適用される日数から期限が決まります。
- 無期限にする構文は
net accounts /maxpwage:unlimitedです。これもPCのポリシー全体を変更するため、エラー回避のために安易に実行しないでください。 - 管理対象PCではドメインGPOなどによって設定が再適用されることがあります。ドメインコントローラーでこのローカル向け手順を実行しないでください。
構文の参考:Microsoft Learn:Net Accounts。
特定のローカルユーザーが「パスワードを無期限にする」設定の場合
最大有効期間を設定しても、ユーザーに無期限の例外があると意図した期限になりません。変更が必要と確認できた場合、Windows PowerShellの Set-LocalUser で例外を解除できます。次は管理者のCMDからWindows PowerShellを呼び出す例です。対象名 john を確認してください。
powershell.exe -NoProfile -Command "Set-LocalUser -Name 'john' -PasswordNeverExpires $false"$false は「パスワードを無期限にする」を解除し、$true は例外を有効にします。ユーザーごとの日数を指定する引数ではありません。64ビットWindowsでは64ビット版Windows PowerShellを使用します。LocalAccountsモジュールは64ビットOSの32ビットPowerShellでは利用できません。AD DS・Microsoftアカウント・Entra IDのクラウドポリシー変更には使いません。参考:Set-LocalUser。
設定内容の確認と戻し方
net accounts
net user johnポリシーの最大日数と、対象ユーザーの「パスワード有効期限」の両方を確認します。「アカウントの有効期限」が変わったかどうかでは判断しません。戻す必要がある場合は、記録した元の最大日数・無期限設定に戻し、再度確認してください。無期限を万能な初期値として使わないでください。
net user /expiresとの違い
/expires はアカウントの利用期限を設定します。期限の指定日が始まった時点でアカウントが期限切れとなり、パスワードの変更だけでは解決しません。日付の書式は地域設定に依存するため、YYYY-MM-DD が常に使えるという説明も正しくありません。パスワード期限の設定目的では使用しないでください。参考:net user公式仕様。
グループポリシーによるパスワードポリシーの設定
ローカルPCの設定画面
ローカルグループポリシーエディターを利用できるエディションでは、Windowsキー+Rから gpedit.msc を開きます。Windows Homeなど、標準でこの管理画面を利用できない環境では、非公式な追加手順を使わず、利用可能な管理方法を確認してください。
- 「コンピューターの構成」→「Windowsの設定」→「セキュリティの設定」→「アカウント ポリシー」→「パスワードのポリシー」を開きます。
- 「パスワードの有効期間」(Maximum password age)を開き、承認された日数を設定します。数値を入力する項目であり、単純な「有効/無効」の切り替えではありません。
- GUIでの0日は無期限を意味します。CMDの
/maxpwage:unlimitedと表記が異なる点に注意します。変更前後の値を確認します。
関連する項目として、パスワードの最小文字数、最小有効期間、履歴、複雑さの要件があります。期限変更と無関係な項目をまとめて変更せず、組織の設計に合わせて管理してください。
AD DSのドメインユーザーはドメイン側で管理する
組織のドメインポリシーは、権限を持つ管理者がグループポリシー管理コンソール(GPMC)などで管理します。端末の gpedit.msc を変更しても組織全体のパスワードポリシーを一括変更したことにはなりません。標準のドメインパスワードポリシーはドメインレベルのGPOで管理します。
ユーザーやグローバルセキュリティグループごとに異なる日数が必要な場合は、細かい設定が可能なパスワードポリシー(FGPP/PSO)を検討します。OUに通常のパスワードポリシーGPOをリンクするだけで、ドメインユーザーの個別期限を設定できるとは限りません。
Active Directory PowerShellモジュールを利用できる管理端末では、次のコマンドで対象ユーザーの結果ポリシーを読み取れます。これはCMDの構文ではなくPowerShellの例です。
Get-ADUserResultantPasswordPolicy -Identity john結果がない場合は、FGPPがない可能性があるため、ドメインの既定パスワードポリシーを確認します。「ポリシーがない」「無期限」と即断しないでください。参考:細かい設定が可能なパスワードポリシー、Get-ADUserResultantPasswordPolicy。
既定ポリシーは、対象ドメインを指定して次のように読み取れます。example.com は実際のAD DSドメイン名に置き換えます。
Get-ADDefaultDomainPasswordPolicy -Identity 'example.com'参考:Get-ADDefaultDomainPasswordPolicy。
グループポリシーの反映を確認する
GPOを変更した場合、クライアント側のグループポリシー更新には次のコマンドを使えます。ただし、ドメインの複製やFGPPの確認を代替するものではなく、これだけで全ユーザーの実効期限を検証したことにはなりません。
gpupdate /force更新後も、対象がローカルかドメインかを合わせてユーザー情報と適用ポリシーを確認してください。
パスワード有効期限の自動通知
期限を運用している環境では、期限前の案内と、ユーザーが安全にパスワードを変更できる経路を用意します。期限切れと、ログオン失敗回数によるアカウントロックアウトは別の状態です。
Windows標準のログオン時通知を確認する
ローカルセキュリティポリシーやGPOの「ローカル ポリシー」→「セキュリティ オプション」にある「対話型ログオン:パスワードが無効になる前にユーザーに変更を促す」で、事前警告の日数を管理できます。これはログオン時の通知設定であり、メール配信機能ではありません。通知の適用対象やサインイン方式を検証してください。参考:ログオン時のパスワード期限通知。
AD DSの期限をスクリプトで取得するときの注意
AD DSの msDS-UserPasswordExpiryTimeComputed は計算済みの期限です。ただし、無期限などを示す最大整数値や、パスワード未設定・次回変更が必要な状態に関連する0などが返るため、そのまま FromFileTime に渡すと誤通知や変換エラーになります。
次はActive Directoryモジュールが利用でき、対象ドメインへの接続と読み取り権限があるPowerShellで、ユーザー一人の期限を表示するだけの例です。パスワード・ポリシーは変更せず、メールも送りません。
$user = Get-ADUser -Identity 'john' -Properties 'msDS-UserPasswordExpiryTimeComputed' -ErrorAction Stop
$value = $user.'msDS-UserPasswordExpiryTimeComputed'
if ($null -eq $value) {
'期限情報を取得できませんでした。'
} else {
$fileTime = [long]$value
if ($fileTime -eq [long]::MaxValue) {
'計算上の期限なし。適用ポリシーとアカウント設定を確認してください。'
} elseif ($fileTime -eq 0) {
'通常の期限日時ではありません。次回ログオン時の変更要求などを確認してください。'
} else {
$expires = [datetime]::FromFileTimeUtc($fileTime).ToLocalTime()
[pscustomobject]@{
UserName = $user.SamAccountName
Expires = $expires
IsExpired = ($expires -le (Get-Date))
}
}
}仕様:msDS-UserPasswordExpiryTimeComputedの特殊値。クラウドアカウントの期限をこの属性だけで判断しないでください。
メール通知・タスクスケジューラを導入する場合
古いサンプルにある Send-MailMessage は廃止扱いで、安全なSMTP接続を保証しないため、Microsoftは使用を推奨していません。SMTPサーバー名と固定宛先を入力するだけのスクリプトを、そのまま本番配信に使用しないでください。参考:Send-MailMessageの注意事項。
- 通知先は対象ユーザーの検証済みアドレスに対応づけます。全ユーザーの情報を一つの固定宛先へ誤送信しない設計にします。
- 無効アカウント、無期限、特殊値、既に期限切れ、通知済みの対象を適切に扱い、重複送信を防ぎます。
- 組織が承認した認証・送信方式を使い、パスワードやアクセストークンをスクリプトへ直書きしません。
- 最初は送信しない一覧確認で対象・日付・時差をテストし、その後に限定したテスト宛先で動作確認します。
- 定期実行は、検証済みスクリプトに対して必要最小限の権限で設定します。実行アカウント、PowerShellの種類、モジュール、ネットワーク到達性、ログ保管先を確認します。
タスクスケジューラでは、タスクの「トリガー」「条件」「履歴」と前回の実行結果を確認します。スクリプトを保存しただけ、またはタスクが正常終了しただけで、通知が届いたとは判断しないでください。
トラブルシューティング
最大日数を変更してもユーザーが無期限のまま
ローカルかドメインかを確認し、ユーザーの「パスワードを無期限にする」設定と実効ポリシーを照合します。AD DSではユーザーの「アカウント」タブの無期限設定に加えて、FGPPの有無を確認します。
ユーザーが見つからない・アクセスが拒否される
表示名ではなく対象アカウント名、/domain の有無、管理者として開いているか、操作権限、ドメイン接続を確認します。別の同名アカウントを新規作成して回避しないでください。
アカウントの期限だけが変わった
net user /expires を実行していないか確認します。それはパスワード期限ではありません。意図しない設定変更なら、管理者が変更前のアカウント期限を確認して復元します。
期限切れとロックアウトを混同しない
アカウントロックアウトのしきい値は、パスワードを変更させるための設定ではなく、認証失敗回数に対する対策です。通知を無視したユーザーへの対処として、むやみにしきい値を下げないでください。保存済みの古い資格情報が失敗を繰り返している場合など、原因の切り分けが必要です。参考:アカウントロックアウトのしきい値。
グループポリシーの適用確認
対象PCに適用されたGPOの確認には、書き込み可能な場所へレポートを出力できます。CMDの例です。
gpresult /h "%TEMP%\GPReport.html"このレポートはGPOの調査に役立ちますが、ユーザーのFGPPや計算済み期限そのものの代わりではありません。AD DSの結果ポリシーとユーザー情報も確認します。ARM64のWindowsで /h が利用できない場合は、Microsoftの説明に従いSysWOW64側のgpresultを確認します。参考:gpresultの公式仕様。
通知・定期実行に問題がある
対象の抽出条件、期限の特殊値、実行アカウントの読み取り権限、承認済み送信方式の認証、ネットワーク接続を確認します。タスクスケジューラのトリガー・条件・履歴を調べ、認証情報を含まないエラー記録を残して管理者へ相談してください。
まとめ
CMDでは net user でユーザーの期限を確認し、ローカルPCのパスワード有効期間は net accounts /maxpwage で管理します。net user /expires はアカウント期限なので、代用できません。
設定変更前にローカル・AD DS・クラウドの違いを確認し、影響範囲、ユーザーごとの例外、変更後の実効値を検証してください。期限運用が必要な場合は通知も整備し、期限だけに頼らない認証対策と組み合わせて管理しましょう。


コメント