Microsoft Entra ID(旧Azure AD)パスワード有効期限の確認・変更方法

Entra
EntraEntra IDMicrosoft 365Microsoft Graph API

Azure AD Graphが2023年6月30日に廃止フェーズに入ったため、今後はMicrosoft Graphを活用していく必要があります。ということで、今回はMicrosoft Entra ID(旧Azure AD)のパスワード有効期限ポリシーをMicrosoft Graphで確認して、無期限の場合は有効期限ありへ変更する方法を記載します。

背景

オンプレミスADからMicrosoft Entra Connect(旧Azure AD Connect)同期でMicrosoft Entra IDに対してユーザーを作成している場合、デフォルト設定のままであれば、Microsoft 365管理センターで設定するパスワード有効期限ポリシーに対して特定の日数を指定していても、Microsoft Entra IDのパスワードは無期限で作成されます。

オンプレミスADのドメイン参加しているPCであれば、パスワード有効期限はグループポリシーで制御されるため関係ありませんが、社外で利用する場合はMicrosoft Entra IDに参加させてPCを使用するケースも想定されます。

Microsoft Entra IDに参加するPCの場合は、パスワードの有効期限はMicrosoft Entra IDで制御を行います。そのため、パスワード有効期限を設けたい場合は追加で設定する必要がでてきます。

追加設定の詳細は以下リンクに詳しく書かれているため、そちらをご参照ください。

よくわかるパスワード ポリシーとよくある質問

今回は、Microsoft Graphを使用して、Microsoft Entra Connect同期で作成されたユーザーのみ抽出してMicrosoft Entra IDのパスワード有効期限を確認し、無期限が設定されているユーザーであれば期限あり設定に変更する方法を記載します。

手順1:Microsoft Graphへ接続

Connect-MgGraph -Scopes “User.Read.All”,”Group.ReadWrite.All”

手順2:全ユーザーのパスワード有効期限を確認する

Get-MGuser -All -Property UserPrincipalName, PasswordPolicies | Select-Object UserprincipalName,@{N=”PasswordNeverExpires”;E={$_.PasswordPolicies -contains “DisablePasswordExpiration”}}

手順3:Azure AD Connect同期ユーザーのみパスワード有効期限を確認してCSV出力

Get-MGuser -All -Property UserPrincipalName, PasswordPolicies, OnPremisesSyncEnabled |
Where-Object {$_.OnPremisesSyncEnabled -eq $true} |
Select-Object UserPrincipalName,@{N=”PasswordNeverExpires”;E={$_.PasswordPolicies -contains “DisablePasswordExpiration”}} |
Export-Csv -Path “C:\Users\XXXXX\Desktop\output.csv” -NoTypeInformation

手順4:無期限のユーザーをCSVから取り込み、期限ありに設定変更

Import-Csv -Path “C:\Users\XXXXX\Desktop\output.csv” | ForEach-Object { Update-MgUser -UserId $_.UserPrincipalName -PasswordPolicies None -PassThru }

上記をまとめたスクリプトの作成

# MS Graphへ接続
Connect-MgGraph -Scopes "User.Read.All", "Group.ReadWrite.All"

# Entra Connect同期したユーザーのみパスワード有効期限を確認して、無期限のユーザーをCSV出力する
Get-MGuser -All -Property UserPrincipalName, PasswordPolicies, OnPremisesSyncEnabled | 
Where-Object { $_.OnPremisesSyncEnabled -eq $true } |
Select-Object UserPrincipalName, @{N = "PasswordNeverExpires"; E = { $_.PasswordPolicies -contains "DisablePasswordExpiration" } } |
Where-Object { $_.PasswordNeverExpires -eq $true } |
Where-Object { $_.UserPrincipalName -notlike "*onmicrosoft.com*" } |
Export-Csv -Path "C:\Users\XXXXX\Desktop\output.csv" -NoTypeInformation

# CSVから取り込んだユーザーのパスワードを期限あり設定にする
$counter = 0
Import-Csv -Path "C:\Users\XXXXX\Desktop\output.csv" | ForEach-Object {
  Update-MgUser -UserId $_.UserPrincipalName -PasswordPolicies None -PassThru
  $counter++
}
Write-Output ("{0}件の処理が完了しました" -f $counter)

参考リンク

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