我需要在本地计算机(没有网络或域,只有计算机)上批量重置密码为单个密码;例如 %1Percent 。我想知道这是否可以通过批处理或 power shell 或某种脚本来实现。
答案1
使用 Powershell(需要管理员权限):
- 从用户输入中获取新密码作为 SecureString
- Get-Localuser 枚举所有本地用户并将其传送到
- 检查要排除的用户的 where 子句
- 其余用户通过管道传输到 Set-Localuser,以设置在第一个命令中输入的密码。
#Requires -RunAsAdministrator
$SecurePassword = Read-Host -Prompt "Enter password for all users" -AsSecureString
$Exclude = "Administrator","Guest","DefaultAccount"
Get-LocalUser |
Where {$Exclude -notcontains $_.Name} |
Set-Localuser -Password $SecurePassword
答案2
创建带有扩展名的文本文件cmd
,例如nuke_users_passwords.cmd
使用以下内容(根据需要替换用户名和密码)并运行它
@echo off
net user username1 new_password
net user username2 new_password
...
net user usernameN new_password
另一个解决方案是使用威盛自动枚举本地用户并更改其密码。
以下是可以排除一些需要跳过的帐户的 VBS 脚本。将其保存FileName.vbs
并以“管理员身份”运行
On Error Resume Next
strPasswd = "SuperPassword"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_UserAccount Where LocalAccount = True")
For Each objItem in colItems
Do While True
if objItem.Name = "Guest" then Exit Do ' Skip some account
if objItem.Name = "Administrator" then Exit Do ' Skip some account
if objItem.PasswordChangeable = False then Exit Do '
objItem.SetPassword strPasswd
objItem.SetInfo
Exit Do
Loop
Next
Wscript.Echo "Done."
PS“以管理员身份”运行这些脚本