0

好吧,我需要一个批处理脚本大师来帮助我摆脱我已经支持自己的角落。

我有一个作为系统运行的程序,我想更改出现在网络用户输出中的所有帐户的密码。我不确定如何仅使用命令行或基于 AHK 的脚本来做到这一点。

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

C:\Users\Resident>net user

User accounts for \\9100BASELINE

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

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

谁能帮我解决这个问题?在我意识到我不知道如何从那里正则表达式用户名之前,我尝试将每个项目都是一个令牌的 for 循环拍打在一起。

4

2 回答 2

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 尝试为非用户文件夹设置密码,它实际上不会导致任何问题。

于 2017-02-03T22:20:26.003 回答
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%"
)
于 2013-07-17T22:51:40.100 回答