在命令提示符下更改所有用户帐户的密码

时间:2013-07-17 17:41:40

标签: batch-file command

好吧,我需要一些批处理脚本专家来帮助我摆脱我自己支持的角落。

我有一个以系统身份运行的程序,我想更改net用户输出中显示的所有帐户的密码。我不确定如何使用命令行或基于AHK的脚本执行此操作。

当我执行net user命令时,输出对我来说是这样的:

C:\Users\Resident>net user

User accounts for \\9100BASELINE

-------------------------------------------------------------------------------
Administrator            Guest                    Resident
The command completed successfully.

我需要一些方法将所有帐户的密码(无论是3还是50)更改为我选择的内容。

任何人都可以帮我解决这个问题吗?我尝试将一个for循环放在一起,其中每个项目都是一个标记,然后才意识到我不知道如何将用户名重新出现在那里。

2 个答案:

答案 0 :(得分:2)

您实际上可以完全使用批处理。

最简单的方法是列出所有文件夹:

cd C:\Users
dir /b /o:n /ad > users.txt

之后,您将使用for循环为Users目录中的每个用户设置密码,并确保脚本不会尝试为Public文件夹设置密码,因为它不是用户

看起来像这样:

for /f %%i in ('type C:\Users\users.txt') do(
if not %%i==Public (
net user %%i [Insert Password Here]
)
)

从技术上讲,您实际上不必检查额外的非用户文件夹,因为如果cmd尝试为非用户文件夹设置密码,则实际上不会导致任何问题。

答案 1 :(得分:1)

我建议使用一些VBScript的帮助:

Set accounts = GetObject("WinNT://.")
accounts.Filter = Array("user")
For Each user In accounts
  WScript.Echo user.Name
Next

将其保存为listusers.vbs并按以下方式运行:

@echo off

setlocal

set /p "newpw=Enter new password: "

for /f "delims=" %%u in ('cscript //NoLogo C:\path\to\listusers.vbs') do (
  net user "%%u" "%newpw%"
)

修改:如果要省略特定帐户的处理,可以在VBScript中添加排除列表:

Set exclude = CreateObject("Scripting.Dictionary")
exclude.CompareMode = vbTextCompare
exclude.Add "HomeGroupUser$", True
exclude.Add "otheruser", True
...

Set accounts = GetObject("WinNT://.")
accounts.Filter = Array("user")
For Each user In accounts
  If Not exclude.Exists(user.Name) Then WScript.Echo user.Name
Next

或使用listusers.vbs过滤findstr的输出:

for /f "delims=" %%u in (
  'cscript //NoLogo C:\path\to\listusers.vbs ^| findstr /v /i ^
    /c:HomeGroupUser$ /c:otheruser ...'
) do (
  net user "%%u" "%newpw%"
)