Question

Je dois créer un script .vbs pour réinitialiser le mot de passe administrateur local Windows sur un grand groupe d'ordinateurs. Mon problème est que certains de nos sites ont renommé le compte administrateur pour des raisons de sécurité. Quelqu'un at-il un script qui modifie le mot de passe du compte administrateur basé sur le SID du compte Administrateur d'origine?

Était-ce utile?

La solution

En utilisant le fait que le SID administrateur local se termine toujours par -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

Autres conseils

Il y a un outil flottant autour de quelque part appelé LookupAccountName (avec la source!) Que, étant donné le SID du adminitrator builtin vous donnera son nom.

Vous allez probablement finir par l'écriture de code C ++ pour tirer celui-off assez bien.

Comme Josué dit, je ne pense pas que vous pouvez le faire avec l'hôte de script Windows uniquement, vous pouvez l'utiliser télécharger quelque chose et l'exécuter:

  • Une application personnalisée qui appelle LookupAccountSid (S-1-5-domain-500 SID ou d'un groupe admin ENUM) + NetUserSetInfo pour réinitialiser le mot de passe (a besoin pour fonctionner cela comme admin)
  • http://home.eunet.no/pnordahl/ntpasswd/ (Réinitialiser au démarrage)
  • Vider le SAM et le crack hash du mot de passe (Cain, John the Ripper, L0phtCrack etc)

@ réponse de DmitryK est bonne, et je ne savais pas de ce genre de choses. Mais je sais que ce genre de chose est généralement plus propre dans PowerShell, donc je l'ai porté.

Par exemple, on peut écrire toute fonction GetAdminName:

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

(Ajoutez l'option -ComputerName à l'appel gwmi pour ce faire sur un serveur.)

Le reste devient:

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

(application du nom de l'ordinateur approprié au besoin, bien sûr.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top