PowerShell如何引用其他命令返回属性实现AD用户账号自动解锁
PowerShell 解锁AD账号脚本整合方案
你可以直接将查询逻辑和解锁逻辑整合,通过变量承接AD查询返回的用户对象,直接调用SamAccountName属性即可实现需求,整合后的完整代码如下,额外增加了重名场景的兼容处理,适配1500人规模的企业使用:
function unlocktm { # 输入用户姓名信息 $Firstname = Read-Host "请输入用户的名" $Lastname = Read-Host "请输入用户的姓" # 从AD查询匹配的用户,获取SamAccountName属性 $matchedUsers = Get-ADUser -Filter "Surname -like '$Lastname*' -and GivenName -like '$Firstname*'" -Properties SamAccountName # 处理不同查询结果 if ($matchedUsers.Count -eq 0) { Write-Host "未找到匹配的AD用户,请检查输入的姓名是否正确" return } # 重名场景下让用户选择对应账号 elseif ($matchedUsers.Count -gt 1) { Write-Host "找到多个匹配用户,请选择要解锁的用户序号:" for ($i=0; $i -lt $matchedUsers.Count; $i++) { Write-Host "$($i+1). 姓名:$($matchedUsers[$i].Name) 用户名:$($matchedUsers[$i].SamAccountName)" } $selectIndex = [int](Read-Host "请输入序号") - 1 $targetUser = $matchedUsers[$selectIndex] } else { $targetUser = $matchedUsers[0] } # 执行解锁操作 Unlock-ADAccount -Identity $targetUser.SamAccountName -Credential adminaccount Write-Host "用户 $($targetUser.Name)(用户名:$($targetUser.SamAccountName))的账号已解锁成功!" }
关键实现说明
- 获取其他命令返回的属性只需要将命令执行结果赋值给变量,通过
变量名.属性名的格式即可直接调用,不需要额外的转换逻辑 - 如果你需要保留原有的
findtm独立函数,只需要将上述代码中Get-ADUser那一行替换为$matchedUsers = findtm即可,后续逻辑完全通用
内容的提问来源于stack exchange,提问作者notbarnobi8585
相关产品推荐
相关产品推荐

