The estimated reading time 3 minutes
Laufwerkszuordnung mehrerer Anmeldeskripts im SYSVOL abändern
Als Consultant sieht man jeden Tag andere Kundenumgebungen und jede Umgebung hat ihre eigene Individualität. Das Zuweisen der Netzwerklaufwerke ist ebenfalls oft sehr unterschiedlich. In diesem Artikel beschäftige ich mich mit einer Umgebung in der jeder Benutzer ein individuelles Loginscript besitzt. (ja das gibt es immer wieder!)
Wie man sich vorstellen kann ist es nicht so einfach eine Änderung für alle durchzuführen ohne die anderen Laufwerkszuordnungen zu beeinflussen.
Ich habe mich hier der Powershell bedient und ein kleines Script entwickelt welches viele Loginscripts bearbeitet und abändert.
Wo befinden sich die Loginscripts einer Domäne? \\domain.de\NETLOGON\
Meine Testumgebung beinhaltet 7 Anmeldeskripte aber die Methode kann auch auf mehrer hundert Skripte angewendet werden.
Einige Skripte sind ähnlich aber doch sind alle unterschiedlich.
Um diese Unordnung etwas zu entzerren muss eine einheitliche Serverstruktur geschaffen werden. Wenn diese soweit aufgebaut ist und der Tag der Umstellung kommt, müssen alle Loginscripte schnellstmöglich angepasst werden. In meinem Fall mit 7 Skripten ist dies noch händisch zu schaffen, allerdings nicht mehr wenn es mehrere hundert Skripte betrifft.
Nun zeige ich, wie dies mit Powershell einfach möglich ist.
Die Powershell ISE mit administrativen Rechten starten. Außerdem muss ein Benutzer verwendet werden, welcher Schreibrechte auf das SYSVOL Verzeichnis hat.
Set-Location \\demo01.it-koehler.com\NETLOGON
get-childitem
Die Loginscripts erscheinen nun.
Nun sind wir soweit, dass wir in allen Loginscripts suchen können (zunächst nur suchen und anzeigen).
$searchstring = "fs01"
$paths = (gci -File |foreach-object{if ((select-string -inputobject $_ -Pattern "$searchstring")){($_).FullName}})
$paths
Die Ausgabe zeigt alle CMDs, welche den String „fs01“ enthalten.
Der nächste Schritt ist nun das Mapping des alten Dateiservers zu entfernen. „fs01“ soll nun durch „fs03“.
$searchstring = "fs01" $paths = (gci -File |foreach-object{if ((select-string -inputobject $_ -Pattern "$searchstring")){($_).FullName}}) $paths foreach($path in $paths){ Set-Content $path -Value ((get-content $path | select-string -pattern "$searchstring" -notmatch)) gci -File $path | Add-Content -Value ("@net use v: /delete /y") gci -File $path | Add-Content -Value ("@net use v: \\fs03.demo01.it-koehler.com\data") }
Das Skript untersucht nun die Loginscripts und entfernt alle Linien die „fs01“ enthalten und setzt dann „@net use v: \\fs03…“ ein.
Das Ergebnis:
Zusammenfassen von allen Loginscripts in eine Datei
Manchmal ist es auch interessant einfach nur einen Überblick über alle Loginscripts zu bekommen. Folgendes Script ließt alle Anmeldeskripte aus und schreibt den Inhalt in eine TXT Datei.
$profilebat = Get-ChildItem -File $profilebat foreach ($bat in $profilebat){ $bat.FullName | Out-File C:\temp\profile-bat-content.txt -Encoding utf8 -Append Get-Content -Path $bat.FullName | Out-File C:\temp\profile-bat-content.txt -Encoding utf8 -Append }
Ziemlich einfach und effektiv.
Wenn weitere Fragen sind, lasst mir einfach einen Kommentar zukommen, sollte euch der Artikel gefallen haben, drückt bitte auf „Helpful“.
Viel Spaß mit euren Loginscripts.