Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Netzlaufwerke im Logonscript trennen und anderes LW verbinden

Frage Entwicklung Batch & Shell

Mitglied: Rohabu

Rohabu (Level 1) - Jetzt verbinden

02.09.2009, aktualisiert 18.10.2012, 6105 Aufrufe, 14 Kommentare, 1 Danke

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:

01.
@echo off 
02.
 
03.
for /f "tokens=2,3 delims= " %%i in ('net use') do ( 
04.
net use %%i /delete  
05.
net use %%i "%%j%"  
06.
)
Für jeden Tip, Link, Hilfe und Information bin ich schon jetzt sehr dankbar!

Viele Grüße
Rolf
Mitglied: bastla
02.09.2009 um 12:55 Uhr
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:
01.
@echo off & setlocal 
02.
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:
01.
@echo off & setlocal 
02.
if not exist "\\Server\Share$\%username%-Mapping.txt" goto :eof 
03.
net use * /d /y>nul 
04.
for /f "usebackq tokens=1,2 delims==" %%i in ("\\Server\Share$\%username%-Mapping.txt") do set "Old=%%j" & call :ProcessMapping %%i 
05.
del "\\Server\Share$\%username%-Mapping.txt" 
06.
goto :eof 
07.
 
08.
:ProcessMapping 
09.
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do net use %1 %%b 
10.
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]
Bitte warten ..
Mitglied: Rohabu
02.09.2009 um 14:25 Uhr
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?
Bitte warten ..
Mitglied: bastla
02.09.2009, aktualisiert 18.10.2012
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 )
del "\\Server\Share$\%username%-Mapping.txt" 2>nul
Grüße
bastla
Bitte warten ..
Mitglied: Rohabu
03.09.2009 um 12:17 Uhr
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:

01.
ECHO ProcessMapping betreten 
02.
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
Bitte warten ..
Mitglied: 81825
03.09.2009 um 12:31 Uhr
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.

Wenn du wissen möchtest, was übersetzt wird und warum offenbar Fehler auftreten, kannst du einfach die Zeilen 8-10 ersetzen durch
01.
:ProcessMapping 
02.
@echo on 
03.
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do net use %1 %%b 
04.
pause 
05.
@echo off 
06.
goto :eof
ersetzen.
Bitte warten ..
Mitglied: Rohabu
03.09.2009 um 13:15 Uhr
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!
Bitte warten ..
Mitglied: Rohabu
03.09.2009 um 16:40 Uhr
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?
Bitte warten ..
Mitglied: bastla
03.09.2009 um 18:22 Uhr
Hallo Rohabu!

Lässt sich:
01.
@echo off & setlocal 
02.
if not exist "\\Server\Share$\%username%-Mapping.txt" goto :eof 
03.
for /f "usebackq tokens=1,2 delims==" %%i in ("\\Server\Share$\%username%-Mapping.txt") do set "Old=%%j" & call :ProcessMapping %%i 
04.
del "\\Server\Share$\%username%-Mapping.txt" 
05.
goto :eof 
06.
 
07.
:ProcessMapping 
08.
for /f "tokens=1,2 delims==" %%a in ('findstr /i /b "%Old:\=\\%=" "\\Server\Share$\Zuordnungstabelle.txt"') do ( 
09.
    net use %1 /d /y>nul 
10.
    net use %1 %%b 
11.
12.
goto :eof
Nur aus reiner Neugier: Wozu diese Einschränkung?

Grüße
bastla
Bitte warten ..
Mitglied: Rohabu
04.09.2009 um 08:32 Uhr
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
Bitte warten ..
Mitglied: bastla
04.09.2009 um 15:17 Uhr
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
Bitte warten ..
Mitglied: 81825
04.09.2009 um 15:33 Uhr
<OT>
Hallo, bastla,
aber zumindest habt ihr mal darüber gesprochen, das ist doch auch was.

Grüße
greypeter
</OT>
Bitte warten ..
Mitglied: Rohabu
18.09.2009 um 15:25 Uhr
Hallo nochmal zusammen,

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

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.

01.
  
02.
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.

01.
  
02.
 :ProcessMapping 
03.
 for /f "tokens=1,2 delims==" %%a in ('findstr /i /b 
04.
 "%Old:\=\\%=" 
05.
 "\\Server\Share$\Zuordnungstabelle.txt"') do ( 
06.
     net use %1 /d /y>nul 
07.
     net use %1 %%b 
08.
     echo > \\Share\Server\%username%_mappings.txt [Hier weiß ich nicht weiter] 
09.
10.
 goto :eof 
11.
 
Hat diesbezüglich vieleicht noch jemand einen Tip für mich?

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

Gruß
Rohabu
Bitte warten ..
Mitglied: bastla
18.09.2009 um 15:38 Uhr
Hallo Rohabu!

Versuch es mit der folgenden Zeile:
>>\\Share\Server\%username%_mappings.txt echo %1 %%b
Grüße
bastla
Bitte warten ..
Mitglied: Rohabu
18.09.2009 um 15:52 Uhr
Hallo bastla,

wieder einmal vielen Dank für die schnelle Antwort!

Funktioniert perfekt!

Schönes Wochenende!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Netzlaufwerke mit einer VPN Verbindung verbinden lassen (16)

Frage von M.Marz zum Thema Windows Server ...

Windows Server
gelöst Windows Server 2012 mit Fritzbox per VPN verbinden (13)

Frage von StefanT81 zum Thema Windows Server ...

Switche und Hubs
gelöst 2 VLANs, tragged und mit link aggregation oder Verbinden oder einzeln (1)

Frage von ADORSE zum Thema Switche und Hubs ...

LAN, WAN, Wireless
Zwei private Netzwerke (LAN und WLAN) mit SXT Lite5 verbinden (9)

Frage von MWelslau zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...