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)