2013-07-17 107 views
0

好吧,我需要一些批处理脚本专家来帮助我走出自己投入的角落。在命令提示符处更改所有用户帐户的密码

我有一个作为系统运行的程序,我想更改net用户输出中出现的所有帐户的密码。我不太清楚如何通过命令行或基于AHK的脚本来实现这一点。

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

C:\Users\Resident>net user 

User accounts for \\9100BASELINE 

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

我需要一些方法来对所有帐户在这里更改密码(无论是3或50)的东西我选择。

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

回答

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.vbsfindstr输出:

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

这是胜利。 –

+0

我唯一关心的是它抓住了$ homegroup以及所有其他用户......我并不在意,因为我没有任何联网设备。但这对某些人来说可能是一种痛苦。 –

1

可以实际上一批这样做纯粹。

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

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

之后,你会使用一个for循环,设置一个密码在用户目录中的每个用户,并确保了脚本不会尝试为公用文件夹设置密码,因为它不是用户。

它会是这样的:

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

从技术上讲,你实际上并不需要检查额外的非用户文件夹,CMD实际上不会造成任何问题,如果它试图设置一个密码对于非用户文件夹。

相关问题