我需要创建一个.VBS脚本来重置大型计算机上的Windows本地管理员密码。我的问题是我们的一些网站出于安全原因重命名了管理员帐户。有没有人有一个脚本可以根据原管理员帐户的SID更改管理员帐户的密码?
答案 0 :(得分: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
答案 1 :(得分:0)
有一个名为LookupAccountName(带有源!)的工具,它给出了内置管理员的SID,它会给你它的名字。
你可能最终会编写C ++代码来合理地推出这个代码。
答案 2 :(得分:0)
就像Joshua说的那样,我不认为你只能用windows脚本主机做这件事,你可以用它来下载并执行它:
答案 3 :(得分: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()
(当然,根据需要应用适当的计算机名称。)