Logo faq-o-matic.net
Logo faq-o-matic.net

Lokalen Benutzer per PowerShell umbenennen

von veröffentlicht am18. Dezember 2013, 06:21 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: PowerShell   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

Obwohl man ja eher Benutzerkonten unter Verzeichnisdiensten wie Active Directory verwaltet und dadurch auch eine zentrale Umbenennung bei Namensänderung u.a sehr gut mit der Windows PowerShell durchgeführt werden kann, kommt es doch manchmal vor, dass man lokale Benutzerkonten umbenennen muss. Dazu reicht es dann leider auch nicht aus, nur in der SAM-Datenbank (SAM, Security Account Manager) den Usernamen anzupassen. Zu den weiteren Attributen zählen der vollständige Name, der Benutzerprofilordner und der dazugehörige Eintrag in der Registry.

Hierbei gibt es keine besondere Anforderung an die PowerShell Version.

Die Ausführung benötigt jedoch administrative Berechtigungen unter einem separaten Benutzerkonto!

Zuerst ist es sinnvoll, drei wichtige Namens-Informationen abzufragen und in Variablen abzulegen, dazu verwendet man Read-Host.

$old = Read-Host "Alter Username"
$new = Read-Host "Neuer Username"
$name = Read-Host "Neuer Fullname"

Die erste Umbenennung erfolgt beim Username. Es ist tatsächlich gar nicht so einfach, eine geeignete Möglichkeit zu finden. Ich habe mich schließlich für WMI (Windows Management Instrumentation) entschieden. Es ist zwar nicht gerade für seine Performance bekannt, bietet jedoch gerade in der PowerShell die Objektunterstützung an, welche uns die Arbeit wieder enorm vereinfacht! Eine andere Möglichkeit wäre noch ADSI WinNT, was ich jedoch als eher umständlich und veraltet ansehe.

Mit Get-WmiObject rufen wir die Klasse Win32_UserAccount auf und filtern nach dem alten Username. Dieses mache ich aufgrund von Performance-Vorteilen nicht mit der gwmi Filter-Funktion, sondern mit Where-Object. Das Ergebnis sollte jetzt den gefundenen User enthalten und durch die einzige vorhandene Methode dieses Objektes können wir ein Umbenennen durchführen.

(gwmi Win32_UserAccount | ?{$_.Name -eq $old}).Rename($new)

Als Nächstes machen wir uns das altbekannte „Net User“ zunutze, welches übrigens keine Umbenennung des Usernames unterstützt! Jedoch kann man damit den vollständigen Namen einfach anpassen.

net user $new /fullname:$name

Über Rename-Item wird dann der Benutzerprofilordner-Name geändert.

Rename-Item C:\Users\$old $new

Als Letztes passen wir dann noch den entsprechenden Benutzerprofilpfad in der Registry an. Damit man nicht umständlich die User SID (Security Identifier) ermitteln muss, wird die Ausgabe von Get-ItemProperty mit Where-Object nach dem alten Profilpfad gefiltert und dieser danach durch Set-ItemProperty mit dem neuen Pfad ersetzt.

gp "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*" | ?{$_.ProfileImagePath -eq "C:\Users\$old"} | sp -Name ProfileImagePath -Value "C:\Users\$new"

In einem späteren Artikel werde ich dann die Umbenennung eines Active Directory Benutzerkontos mit der Windows PowerShell aufzeigen.

© 2005-2017 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!