Pregunta

Es necesario crear un guión .VBS para restablecer la contraseña de administrador local de Windows en un gran grupo de equipos. Mi problema es que algunos de nuestros sitios han cambiado el nombre de la cuenta de administrador por razones de seguridad. ¿Alguien tiene un script que cambia la contraseña de la cuenta de administrador basado en el SID de la cuenta de administrador original?

¿Fue útil?

Solución

Usando el hecho de que el SID del administrador local siempre termina con -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

Otros consejos

Hay una herramienta flotando en algún lugar llamado LookupAccountName (con fuente!) Que, dado el SID del adminitrator incorporado le dará su nombre.

Usted probablemente va a terminar de escribir código C ++ para tirar de éste fuera razonablemente bien.

Al igual que Joshua dice, no creo que se puede hacer esto con Windows Scripting Host solamente, se podría utilizar descargar algo y ejecutarlo:

  • Una aplicación personalizada que llama LookupAccountSid (S-1-5-dominio-500 SID o administrador enumeración grupo) + NetUserSetInfo para restablecer la contraseña (necesita ejecutar este como administrador)
  • http://home.eunet.no/pnordahl/ntpasswd/ (Reset en el arranque)
  • volcar los hashes SAM y romper la clave (Caín, John the Ripper, L0phtCrack etc)

@ respuesta de DmitryK es bueno, y yo no sabía nada de eso. Pero sí sé que este tipo de cosas es por lo general más limpia en PowerShell, así que es portado.

Por ejemplo, toda la función GetAdminName puede escribirse:

$adminName = (gwmi win32_account | ? { $.SID.StartsWith( 'S-1-5-' ) -and $.SID.EndsWith( '-500' ) }).Name

(Añadir la opción -ComputerName a la llamada gwmi de hacer esto en un servidor.)

El resto se convierte en:

$user = ([ADSI]"WinNT://$($env:COMPUTERNAME)/$adminName,User")
$user.SetPassword( 'xxx' )
$user.SetInfo()

(aplicando el nombre de equipo apropiado, según sea necesario, por supuesto.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top