これやるのにめっちゃ時間かかったのでメモ
ユーザー毎とグループ毎で一括設定できます
ユーザー用
# 複数のアカウント表示名を指定
$userDisplayNames = @("テスト ユーザーA","テスト ユーザーB","テスト ユーザーC")
try {
$totalUserCount = 0 # 合計ユーザー数をカウントする変数を初期化
foreach ($userDisplayName in $userDisplayNames) {
# ユーザーを表示名から取得
$user = Get-ADUser -Filter "DisplayName -eq '$userDisplayName'"
# ユーザーが存在する場合のみ処理を行う
if ($user) {
# ユーザーに対してPasswordNeverExpiresを設定する
Set-ADUser -Identity $user.SamAccountName -PasswordNeverExpires $false
Write-Host "ユーザー '$userDisplayName' のパスワードの有効期限を無期限にする設定を無効にしました。"
# ユーザーに対してChangePasswordAtLogonを設定する
Set-ADUser -Identity $user.SamAccountName -ChangePasswordAtLogon $true
Write-Host "ユーザー '$userDisplayName' のパスワードリセットの準備が完了しました。"
$totalUserCount++ # 合計ユーザー数をインクリメント
} else {
Write-Host "アカウント表示名 '$userDisplayName' のユーザーが見つかりませんでした。"
}
}
# 合計ユーザー数を表示
Write-Host "設定した合計ユーザー数: $totalUserCount"
} catch {
Write-Host "エラーが発生しました: $($_.Exception.Message)"
}
グループごと
# 複数のグループ名を指定
$groupNames = @("グループ1", "グループ2", "グループ3")
try {
foreach ($groupName in $groupNames) {
# グループのメンバーを取得
$groupMembers = Get-ADGroupMember -Identity $groupName -Recursive
# 各メンバーに対して処理を行う
$userCount = 0
foreach ($member in $groupMembers) {
if ($member.objectClass -eq "user") {
# ユーザーに対してPasswordNeverExpiresを設定する
Set-ADUser -Identity $member.SamAccountName -PasswordNeverExpires $false
Write-Host "グループ '$groupName' のユーザー '$($member.SamAccountName)' のパスワードの有効期限を無期限にする設定を無効にしました。"
# ユーザーに対してChangePasswordAtLogonを設定する
Set-ADUser -Identity $member.SamAccountName -ChangePasswordAtLogon $true
Write-Host "グループ '$groupName' のユーザー '$($member.SamAccountName)' のパスワードリセットの準備が完了しました。"
$userCount++
}
}
# ユーザーの合計数を表示
Write-Host "グループ '$groupName' のユーザーの合計数: $userCount"
}
} catch {
Write-Host "エラーが発生しました: $($_.Exception.Message)"
}