You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CSV中查找指定用户名以实现PowerShell AD账号密码重置

问题根源

  • 你的CSV文件未配置表头,Import-CSV默认将第一行数据Daniel,Apples识别为列名,无法正确读取所有用户的账号密码信息
  • 变量赋值顺序错误:在$User未初始化的情况下提前读取$User.Username和$User.Password,两个变量初始为空
  • 交互逻辑位置错误:将Read-Host输入提示放在了全量遍历循环内,且未添加用户名匹配判断,导致每次遍历都会触发输入、直接执行所有账号的重置操作

优化方案

你不需要保留全量ForEach遍历逻辑,直接按输入的用户名筛选CSV中对应的条目即可,步骤如下:

  1. 先修正CSV格式,在第一行添加表头Username,Password,修改后CSV内容如下:
Username,Password
Daniel,Apples
Ben,Bannanas
Harry,Pears
Peter,Grapes
  1. 调整代码逻辑:先导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:57:02