luke61
Goto Top

Administrator Passwort mit SID ändern

Hallo Zusammen,

erstmal ich bin neu hier. Ich hoffe das ich alle Regeln eingehalten habe. Und zwar ich suche ein Script welches das lokale Administrator Passwort ändert. Hört sich simple an aber da der lokale Administrator in jedem Land anders heißt muss man die SID zur Hilfe zu nehmen. Nach stundenlangen Googlen und durchlesen unzähliger Forenbeiträge habe ich ein Großteil des Scripts zusammenschustern können. Aber ich scheitere immer an einem Punkt - ich hoffe ihr könnt mir helfen.

Hier der Code:

...
Set WshNetwork = WScript.CreateObject("WScript.Network")
strComputer = WshNetwork.ComputerName

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colAccounts = objWMIService.ExecQuery _
("Select * From Win32_UserAccount Where LocalAccount = TRUE")

For Each objAccount in colAccounts
If Left (objAccount.SID, 6) = "S-1-5-" and Right(objAccount.SID, 4) = "-500" Then
Wscript.Echo objAccount1.Name

End If
Next



Set objUser = GetObject("WinNT://" & strComputer & ???)

objUser.SetPassword "newpasswort" ' <--- this will be the new admin password.
objUser.SetInfo

Mein Problem habe ich rot makiert, und zwar müsste statt "Wscript.Echo objAccount.Name" das Objekt in eine Variable "umgewandelt" werden damit ich es bei den ??? einsetzen und damit weiterarbeiten kann. Oder gibt es da noch eine andere Möglichkeit? Ich hoffe irgendjemand kann mir helfen!!!

Gruß Lukas

Content-Key: 108599

Url: https://administrator.de/contentid/108599

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: Biber
Biber 10.02.2009 um 18:06:48 Uhr
Goto Top
Moin Luke61,

willkommen im Forum.

Dein Schnipsel um die restlichen Puzzleteile ergänzt könnte so ungefähr aussehen.
Set WshNetwork = CreateObject("WScript.Network")   
strComputer = WshNetwork.ComputerName

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  

Set colAccounts = objWMIService.ExecQuery _
("Select * From Win32_UserAccount Where LocalAccount = TRUE")  

For Each objAccount in colAccounts
If Left (objAccount.SID, 6) = "S-1-5-" and Right(objAccount.SID, 4) = "-500" Then  
   strLocalAdminsName = objAccount.Name
   Wscript.Echo "Der lokale Administrator mit SID S-1-5-..-500 heiss t" & strLocalAdminsName  
   Set objUser = GetObject("WinNT://" & strComputer & "/" & strLocalAdminsName, user")  

   ' #uncomment objUser.SetPassword "newpasswort" ' <--- this will be the new admin password.   
   ' #uncomment objUser.SetInfo   
End If
Next

Die beiden Setze-neues-Passwort-Zeilen habe ich erstmal auskommentiert ... brauchst Du ja zum Testen nicht.

Grüße
Biber
Mitglied: Luke61
Luke61 11.02.2009 um 09:52:18 Uhr
Goto Top
Guten Morgen Biber,

danke erstmal für deine schnelle Anwort.

Leider funktioniert das Script noch nicht richtig. Ich bekomme immer den Fehler "Nicht abgeschlossene Zeichenfolgekonstate" in Zeile 17 | Zeichen 87. Schließe ich diese Zeile allerdings aus bekomme ich den lokalen Administrator ausgegeben. Kann der Fehler dadurch entstehen das die Zeilen 15 | 16 auskommentiert sind? Und noch eine Frage, macht es eigentlich einen unterschied ob die Zeilen 13,15, 16 in bzw außerhalb der Schleife sind?

Viele Grüße
Lukas
Mitglied: Biber
Biber 11.02.2009 um 17:27:34 Uhr
Goto Top
Moin Luke61,

sorry, so konnte és auch nicht funktionieren...

STREICHE: .
Set objUser = GetObject("WinNT:" & strComputer & "/" & strLocalAdminsName, user")
SETZE:
Set objUser = GetObject("WinNT:
" & strComputer & "/" & strLocalAdminsName & ", user")

Ob die beiden mach-mir-dat-Passwort-Anweisungen innerhalb/außerhalb der FOR-EACH-Anweisung sind oder gar in eine kleine Funktion gekapselt werden ist rein philosophisch/ästhetisch zu entscheiden.

Es gibt ja genau eine Wellknown-SID mit dieser Endziffer -500, die den lokalen Adnim auszeichnet.
Ob der nun "Administrator" oder "Hugo" gerufen wird dagegen ist sprach- und computerabhängig.

Grüße
Biber
Mitglied: Luke61
Luke61 06.03.2009 um 10:26:32 Uhr
Goto Top
Hallo Biber,

vielen Dank für deine Hilfe. Mein Problem ist gelöst. =)

Sollte jemand das vollständige Script brauchen dann PM an mich face-wink

Gruß

Lukas
Mitglied: Luke61
Luke61 06.08.2009 um 09:23:23 Uhr
Goto Top
Zitat von @Luke61:
Hallo Biber,

vielen Dank für deine Hilfe. Mein Problem ist gelöst. =)

Sollte jemand das vollständige Script brauchen dann PM an mich
face-wink

Gruß

Lukas


Auf Grund einiger Nachfragen hier das komplette Script:

'==========================================================================   
'   
'// NAME: Change local administator password with SID  

' ** Setup the variables and working environment for the script **   

Set WshNetwork = CreateObject("WScript.Network")   
strComputer = "."  							'//Computer auf dem das Script ausgeführt wird   
strComputer = WshNetwork.ComputerName

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 		  

Set colAccounts = objWMIService.ExecQuery _
("Select * From Win32_UserAccount Where LocalAccount = TRUE") 		'//alle localen Accounts  

For Each objAccount in colAccounts
If Left (objAccount.SID, 6) = "S-1-5-" and Right(objAccount.SID, 4) = "-500" Then '		'//Schleife verlassen sobald ein Account mit "S-1..." anfängt und mit "-500" aufhört   
												'//um den lokalen Administrator herauszufinden  
   strLocalAdminsName = objAccount.Name '//Der lokale Adminname wird in geschrieben  

										
   
form = Chr(7) & Chr(7) & Chr(9) & Chr(1) & Chr5) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & 	'//Passwort in Zahlen umkodiert um eine einfach Decodierung zu vermeiden ACHTUNG: Macht das Passwort nur für Lain unlesbar! Kann zurück kodiert werden  
   
   Set objUser = GetObject("WinNT://" & strComputer & "/" & strLocalAdminsName & ", user") 		  
   objUser.SetPassword form
   objUser.SetInfo 
End If
Next

Bei Bedarf kann man die vbs Datei noch in vbe "verschlüsseln", das Tool hierzu findet sich auf ms.com...