我需要创建一个 .VBS 脚本来重置大量计算机上的 Windows 本地管理员密码。我的问题是,出于安全原因,我们的一些站点已重命名管理员帐户。有没有人有一个脚本可以根据原始管理员帐户的 SID 更改管理员帐户的密码?
问问题
2856 次
4 回答
1
使用本地管理员的 SID 总是以 -500 结尾的事实:
strComputer="." ' local computer by default
Set objUser=GetObject("WinNT://" & strComputer & "/" & GetAdminName & ",user")
objUser.SetPassword "New local admin password"
objUser.SetInfo
Function GetAdminName
'This function was written using information from Table J.1 from the Windows XP resource Kit
'http://www.microsoft.com/resources/documentation/Windows/XP/all/reskit/en-us/Default.asp?url=/resources/documentation/Windows/XP/all/reskit/en-us/prnc_sid_cids.asp
Set objNetwork = CreateObject("Wscript.Network") 'get the current computer name
objComputerName = objNetwork.ComputerName
Set objwmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & objComputerName)
qry = "SELECT * FROM Win32_Account where Domain = '" & cstr(objComputerName) & "'"
'set query, making sure to only look at local computer
For Each Admin in objwmi.ExecQuery(qry)
if (left(admin.sid, 6) = "S-1-5-" and right(admin.sid,4) = "-500") then 'look for admin sid
GetAdminName = admin.name
end if
next
end Function
于 2009-10-03T15:59:11.947 回答
0
有一个名为 LookupAccountName(带有源代码!)的工具漂浮在某个地方,给定内置管理员的 SID,它将为您提供它的名称。
您可能最终会编写 C++ 代码来合理地完成这一任务。
于 2009-10-02T18:54:12.377 回答
0
就像 Joshua 说的那样,我认为你不能只使用 Windows 脚本主机来做到这一点,你可以使用它下载一些东西并执行它:
- 调用 LookupAccountSid(S-1-5-domain-500 SID 或 enum admin group)+NetUserSetInfo 来重置密码的自定义应用程序(需要以管理员身份运行)
- http://home.eunet.no/pnordahl/ntpasswd/(启动时重置)
- 转储 SAM 哈希并破解密码(Cain、开膛手约翰、L0phtCrack 等)
于 2009-10-03T15:36:58.330 回答
0
@DmitryK 的回答很好,我不知道这些东西。但我确实知道这种东西在 PowerShell 中通常更干净,所以我移植了它。
例如,整个GetAdminName
函数可以写成:
$adminName = (gwmi win32_account | ? { $ .SID.StartsWith( 'S-1-5-' ) -and $ .SID.EndsWith( '-500' ) }).Name
(将-ComputerName
选项添加到gwmi
调用以在服务器上执行此操作。)
剩下的变成:
$user = ([ADSI]"WinNT://$($env:COMPUTERNAME)/$adminName,User") $user.SetPassword('xxx') $user.SetInfo()
(当然,根据需要应用适当的计算机名称。)
于 2010-05-18T06:16:24.340 回答