rohabu
Goto Top

Netzlaufwerke im Logonscript trennen und anderes LW verbinden

Hallo zusammen,

da dies mein erster Beitrag ist stelle ich mich mal kurz vor: Ich bin Rolf, 31 Jahre aus Hamburg und arbeite in einem Mittelständischen Unternehmen im Support, wobei wir auch öfters administrative Aufgaben übertragen bekommen.

Mein Problem ist folgendes:

Aufgrund von Umstrukturierungen werden bei uns Fileserver und darauf liegende Shares umbenannt.

Ist: \\ serverA \ shareA
Soll: \\ serverB \ shareB

Die Inhalte der Shares werden dabei 1:1 übernommen.

Da wir auf den Shares z.T. Vorlagen liegen haben (und z.B. Word über den LW-Buchstaben auf die Vorlagen zugreift) möchte ich folgendes per (Anmelde-)Skript lösen.

Vor der Umstellung:
- Beim ausführen des Skriptes soll ausgelesen werden welches Netzlaufwerk auf welchen Buchstaben verbunden ist, diese Information muss irgendwie festgehalten werden

Nach der Umstellung
- Beim ausführen des Skriptes soll die festgehaltene Information mit einer Übersetzungstabelle (?) abgeglichen werden und das korrespondierende, neue Netzlaufwerk auf den selben Buchstaben verbunden werden wie das alte vorher

Ich hoffe das ist nicht zu kompliziert beschrieben, ich versuche mal eine Kurzversion:

Anmeldung vor Umstellung -> Netz-LW's + LW-Buchstaben merken -> Shares umbenennen -> Anmeldung nach Umstellung -> Skript shaut nach User hatte auf F:\ das LW \\ServerA\ShareA also verbinde ich auf F:\ \\ServerB\ShareB

Folgendes Skript habe ich hier im Forum gefunden um gleich gebliebene Netzlaufwerke auf den selben Buchstaben wie vor der Trennung zu verbinden und ich denke es bietet eine gute Grundlage:

@echo off

for /f "tokens=2,3 delims= " %%i in ('net use') do (  
net use %%i /delete 
net use %%i "%%j%"   
)

Für jeden Tip, Link, Hilfe und Information bin ich schon jetzt sehr dankbar!

Viele Grüße
Rolf

Content-Key: 124026

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

Printed on: April 25, 2024 at 15:04 o'clock

Member: bastla
bastla Sep 02, 2009 at 10:55:14 (UTC)
Goto Top
Hallo Rohabu und willkommen im Forum!

Das Zwischenspeichern der aktuellen Zuordnung (mit der Filterung nach ":" werden nur Mappings auf Laufwerksbuchstaben erfasst), könntest Du als Batch so machen:
@echo off & setlocal
for /f "tokens=2,3" %%i in ('net use^|findstr ":"') do >>"\\Server\Share$\%username%-Mapping.txt" echo %%i=%%j  
Damit wird am Server (entsprechende Rechte für den User vorausgesetzt) für jeden User eine Textdatei mit seinen aktuellen Einstellungen hinterlegt (alternativ könnte hier auch ein Speicherort im Profil des Users verwendet werden - die "Sammelvariante" hätte aber vielleicht den Vorteil, dass Du Dir einen Überblick über die Mappings aller User verschaffen kannst).

Zum Wiederherstellen brauchst Du dann eine Zuordnungstabelle (im Beispiel unten "\\Server\Share$\Zuordnungstabelle.txt") mit je einer Zuordnung pro Zeile:
\\ServerA\ShareA=\\ServerB\ShareB

Der Batch zum Umstellen könnte dann so aussehen:
@echo off & setlocal
if not exist "\\Server\Share$\%username%-Mapping.txt" goto :eof  
net use * /d /y>nul
for /f "usebackq tokens=1,2 delims==" %%i in ("\\Server\Share$\%username%-Mapping.txt") do set "Old=%%j" & call :ProcessMapping %%i  
del "\\Server\Share$\%username%-Mapping.txt"  
goto :eof

:ProcessMapping
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do net use %1 %%b  
goto :eof


Allerdings böte sich bei diesem Anlass vielleicht auch eine Gelegenheit, auf dynamisches Mapping (per Logon-Script mit /p:no) umzustellen - damit könnten dann auch gleich Laufwerksbuchstaben zB innerhalb einer Abteilung vereinheitlicht werden ...

Grüße
bastla

[Edit] ">" im Auslesebatch nachgetragen [/Edit]
Member: Rohabu
Rohabu Sep 02, 2009 at 12:25:09 (UTC)
Goto Top
Hallo bastla!

Erstmal herzlichen Dank für deine Willkommensgrüße und deine ausführliche Antwort.

Beim Skript zum auslesen der bestehenden Netzlaufwerke habe ich noch ein Problem.
Das Skript schreibt mir nur das vom Laufwerksbuchstaben her gesehen letzte Laufwerk in die xyz-mappings.txt, alle weitreren verbundenen Netzlaufwerke werden ignoriert.

Muss ich das Skript evtl. mit einer Schleife laufen lassen?
Member: bastla
bastla Sep 02, 2009, updated at Oct 18, 2012 at 16:39:12 (UTC)
Goto Top
Hallo Rohabu!

Da fehlte noch ein ">" - ist jetzt oben nachgetragen.

Vermutlich wirst Du diesen Batch über einige Tage als Logon-Script laufen lassen, um alle User zu "erwischen" - in diesem Fall wäre es sinnvoll, eine ev schon bestehende Datei jeweils neu erstellen zu lassen, damit Du den "Letztstand" vorfindest - dann brauchst Du aber vorweg noch ein "greypetersches" (manchmal mag man(n)'s minimalistisch face-wink)
del "\\Server\Share$\%username%-Mapping.txt" 2>nul
Grüße
bastla
Member: Rohabu
Rohabu Sep 03, 2009 at 10:17:47 (UTC)
Goto Top
Hallo bastla,

Vielen Dank für deine erneute Antwort!

Das erstellen der Datei mit den bisherigen Zuordnungen klappt jetzt perfekt!

Ich habe noch ein Problem beim herstellen der neuen Mappings. Die alten Mappings werden gelöscht und die Datei für die Mappings wird gelöscht, es werden allerdings keine neuen Mappings erstellt.

Meine erste Vermutung war das das Skript aus irgendeinem Grund nicht in die "ProcessMapping" Prozedur springt, ich habe in dieser Prozedur aber mal ein:

ECHO ProcessMapping betreten
PAUSE

eingefügt und dies wird beim ausführen des Skriptes auch angesprungen.

Hast du hier AdHoc nocch eine Idee was ich weiter prüfen kann?

Meine Umsetzungstabelle sieht schematisch wie folgt aus

\\Server\Share \\ServerNeu\ShareNeu
Mitglied: 81825
81825 Sep 03, 2009 at 10:31:25 (UTC)
Goto Top
Hi,

Meine Umsetzungstabelle sieht schematisch wie folgt aus
\\Server\Share \\ServerNeu\ShareNeu

bastla hatte dir aber
Zum Wiederherstellen brauchst Du dann eine Zuordnungstabelle (im Beispiel unten "\\Server\Share$\Zuordnungstabelle.txt") mit je einer Zuordnung pro Zeile:
\\ServerA\ShareA=\\ServerB\ShareB

geraten und sein Script auch entsprechend aufgebaut. face-wink

Wenn du wissen möchtest, was übersetzt wird und warum offenbar Fehler auftreten, kannst du einfach die Zeilen 8-10 ersetzen durch
:ProcessMapping
@echo on
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do net use %1 %%b  
pause
@echo off
goto :eof
ersetzen. face-wink
Member: Rohabu
Rohabu Sep 03, 2009 at 11:15:59 (UTC)
Goto Top
Hallo greypeter,

Vielen Dank für den Hinweis, ich hatte die Gleichheitszeichen tatsächlich vergessen, habe Sie aber jetzt nachgetragen und am Verhalten des Skriptes ändert sich leider nichts, der Sprung in die Prozedur "ProcessMapping" findet nach wie vor statt, es wird aber nichts verbunden.

Kann man sich aus dem Skript evtl. auftretende Fehlermeldungen ausspucken lassen oder sinnvolle Haltepunkte setzen?

//Edit: Ich probiere es mal mit der von dir vorgeschalgenen Aktivierung der Ausgaben über ECHO ON, Danke!
Member: Rohabu
Rohabu Sep 03, 2009 at 14:40:49 (UTC)
Goto Top
So, das Problem habe ich gelöst.

Es lag an einem Fehler beim net use Kommando (Fehler 59: Ein an das System angeschlossenes Gerät ist nicht bereit), ich habe jetzt ein:

ping localhost -n 2 > NUL

als erstes Kommando im ProcessMapping Code eingefügt, damit funktioniert es. Dafür schonmal 1000 Dank!!!

Eine Zusatzfrage habe icch aber noch: Lässt sich das Skript auch so gestalten das nicht alle Netzlaufwerke getrennt werden, sondern nur diejenigen welche auch durch ein neues ersetzt werden?
Member: bastla
bastla Sep 03, 2009 at 16:22:41 (UTC)
Goto Top
Hallo Rohabu!

Lässt sich:
@echo off & setlocal
if not exist "\\Server\Share$\%username%-Mapping.txt" goto :eof  
for /f "usebackq tokens=1,2 delims==" %%i in ("\\Server\Share$\%username%-Mapping.txt") do set "Old=%%j" & call :ProcessMapping %%i  
del "\\Server\Share$\%username%-Mapping.txt"  
goto :eof

:ProcessMapping
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do (  
    net use %1 /d /y>nul
    net use %1 %%b
)
goto :eof
Nur aus reiner Neugier: Wozu diese Einschränkung?

Grüße
bastla
Member: Rohabu
Rohabu Sep 04, 2009 at 06:32:54 (UTC)
Goto Top
Guten Morgen bastla!

Echt Klasse vielen Dank!

Die Einschränkung ist dafür gut das Leute die Laufwerke verbunden haben die nicht umbenannt werden, sich diese nicht neu verbinden müssen.

Vielen Dank & Viele Grüße
Rohabu
Member: bastla
bastla Sep 04, 2009 at 13:17:43 (UTC)
Goto Top
Hallo Rohabu!

Stimmt - Du hattest ja nicht geschrieben dass alleFileserver und darauf liegende Shares umbenannt würden - insofern war meine Frage eher wenig sinnvoll ...

Grüße
bastla
Mitglied: 81825
81825 Sep 04, 2009 at 13:33:44 (UTC)
Goto Top
<OT>
Hallo, bastla,
aber zumindest habt ihr mal darüber gesprochen, das ist doch auch was. face-big-smile

Grüße
greypeter
</OT>
Member: Rohabu
Rohabu Sep 18, 2009 at 13:25:44 (UTC)
Goto Top
Hallo nochmal zusammen,

sorry wenn ich das Thema nochmal ausgrabe, aber meine Frage bezieht sich direkt auf diese genial funktionierende Lösung face-smile

Ich würde gern ein Logging mit in das Skript einbauen welches mir für jeden User auf einem Share eine Datei ablegt in der drin steht welches Laufwerk auf welchen Buchstaben neu verbunden wurde.

Der entsprechende Code müsste ja sicher in der Routine :ProcessMapping stehen, ich habe es an der Stelle probiert wo es unten steht, meine Frage ist nur - welche Variablen für LW-Buchstabe und UNC Pfad des neuverbundenen Laufwerks benutzen?

Ich habe es mit z.B.

 
echo > \\Share\Server\%username%_mappings.txt Auf dem Buchstaben %1 befindet sich jetzt das Laufwerk %%b


probiert, dies schreibt aber tatsächlich die Variablennamen und nicht die Werte in die Textdatei.

 
 :ProcessMapping
 for /f "tokens=1,2 delims==" %%a in ('findstr /i /b  
 "%Old:\=\\%="  
 "\\Server\Share$\Zuordnungstabelle.txt"') do (  
     net use %1 /d /y>nul
     net use %1 %%b
     echo > \\Share\Server\%username%_mappings.txt [Hier weiß ich nicht weiter]
 )
 goto :eof
 

Hat diesbezüglich vieleicht noch jemand einen Tip für mich?

Ich wünsche schonmal allseits ein schönes Wochenende!

Gruß
Rohabu
Member: bastla
bastla Sep 18, 2009 at 13:38:36 (UTC)
Goto Top
Hallo Rohabu!

Versuch es mit der folgenden Zeile:
>>\\Share\Server\%username%_mappings.txt echo %1 %%b
Grüße
bastla
Member: Rohabu
Rohabu Sep 18, 2009 at 13:52:42 (UTC)
Goto Top
Hallo bastla,

wieder einmal vielen Dank für die schnelle Antwort!

Funktioniert perfekt! face-smile

Schönes Wochenende!