如何在CSV中查找指定用户名以实现PowerShell AD账号密码重置
问题根源
- 你的CSV文件未配置表头,
Import-CSV默认将第一行数据Daniel,Apples识别为列名,无法正确读取所有用户的账号密码信息 - 变量赋值顺序错误:在
$User未初始化的情况下提前读取$User.Username和$User.Password,两个变量初始为空 - 交互逻辑位置错误:将
Read-Host输入提示放在了全量遍历循环内,且未添加用户名匹配判断,导致每次遍历都会触发输入、直接执行所有账号的重置操作
优化方案
你不需要保留全量ForEach遍历逻辑,直接按输入的用户名筛选CSV中对应的条目即可,步骤如下:
- 先修正CSV格式,在第一行添加表头
Username,Password,修改后CSV内容如下:
Username,Password Daniel,Apples Ben,Bannanas Harry,Pears Peter,Grapes
- 调整代码逻辑:先导入CSV,再提示输入目标用户名,筛选匹配到唯一用户后再执行重置操作,修正后代码如下:
# 导入带表头的密码CSV文件 $Spreadsheet = Import-CSV "C:\Desktop\Password Reset\Passwords.csv" # 提示输入需要重置密码的用户名 $resetUsername = Read-Host "Who's Password would you like to reset" # 筛选CSV中对应用户的条目 $targetUser = $Spreadsheet | Where-Object {$_.Username -eq $resetUsername} # 判断是否找到匹配用户 if ($targetUser) { # 执行密码重置 Set-ADAccountPassword $targetUser.Username -reset -NewPassword (Convertto-Securestring -asplaintext $targetUser.Password -force) Write-Host "密码已为用户 $($targetUser.Username) 重置为 $($targetUser.Password)" } else { Write-Host "未在CSV中找到对应用户名 $resetUsername 的条目,请检查输入是否正确" }
如果不想修改原CSV文件,可以在导入时手动指定表头,将第一行导入代码替换为:
# 导入无表头的CSV,手动指定列名 $Spreadsheet = Import-CSV "C:\Desktop\Password Reset\Passwords.csv" -Header @("Username","Password")
内容的提问来源于stack exchange,提问作者Daniel De La Warr
相关产品推荐
相关产品推荐

