如何编写PowerShell脚本批量获取域内Windows 10本地用户账户及对应密码?
批量获取域内Windows 10本地用户账户信息(关键:拿不到明文密码)
嘿,先给你明确一个核心事实:Windows系统从设计上就不会存储用户的明文密码,只会保存加密后的哈希值(而且还是受保护的NTLM哈希),所以不管什么脚本都没法直接导出用户当前的明文密码——这是系统的安全防护机制,避免密码泄露风险。
不过,批量获取每台机器的本地用户账户列表,以及密码相关的属性(比如密码是否过期、是否必须设置密码、最后修改时间这些)是完全可行的,下面给你一套完整的方案:
一、先准备目标机器清单CSV
首先你需要一个记录所有目标Win10机器名的CSV文件,比如命名为target_pcs.csv,格式很简单:
ComputerName DESKTOP-ABC123 PC-SALES-01 LAPTOP-USER-XYZ
二、PowerShell批量处理脚本
这个脚本会读取CSV里的机器名,远程连接目标机器(前提是你有足够权限),收集本地用户的关键信息并导出到报告CSV里:
# 导入目标计算机列表 $targetComputers = Import-Csv -Path "C:\YourPath\target_pcs.csv" # 定义要收集的用户属性(按需调整) $userProperties = @( "Name", "FullName", "Description", "Enabled", "PasswordLastSet", "PasswordExpires", "PasswordRequired", "LastLogonDate" ) # 初始化报告文件(如果需要覆盖旧报告,先删除再创建) $reportPath = "C:\YourPath\local_users_summary.csv" if (Test-Path $reportPath) { Remove-Item $reportPath } # 遍历每台计算机处理 foreach ($pc in $targetComputers) { $pcName = $pc.ComputerName Write-Host "正在处理: $pcName" -ForegroundColor Cyan try { # 远程获取本地用户账户(需要目标机器开启WinRM,且你有本地管理员权限) $localUsers = Get-WmiObject -Class Win32_UserAccount -ComputerName $pcName ` -Filter "LocalAccount='True'" -Property $userProperties -ErrorAction Stop # 整理数据并写入报告 foreach ($user in $localUsers) { [PSCustomObject]@{ ComputerName = $pcName UserName = $user.Name FullName = $user.FullName Description = $user.Description AccountEnabled = $user.Enabled PasswordLastSet = $user.PasswordLastSet PasswordExpires = $user.PasswordExpires PasswordRequired = $user.PasswordRequired LastLogonDate = $user.LastLogonDate } | Export-Csv -Path $reportPath -Append -NoTypeInformation } Write-Host "$pcName 处理完成 ✅" -ForegroundColor Green } catch { Write-Host "$pcName 处理失败: $($_.Exception.Message) ❌" -ForegroundColor Red } } Write-Host "所有机器处理完毕!报告已保存到: $reportPath" -ForegroundColor Green
三、必看的注意事项
- 权限要求:运行脚本的账户必须对每台目标机器拥有本地管理员权限,不然连远程读取用户信息都做不到。
- WinRM配置:目标机器需要开启WinRM服务(PowerShell远程管理),如果没开,可以先批量执行
Invoke-Command -ComputerName $pcName -ScriptBlock { Enable-PSRemoting -Force }(同样需要管理员权限)来启用。 - 关于密码哈希:如果你想着手获取密码哈希,那得提醒你——这属于敏感操作,需要极高权限(比如域管理员),而且未经授权使用工具获取哈希是违反安全法规的,绝对不能随便搞。
内容的提问来源于stack exchange,提问作者MjrPayne




