Windows Networking & Drive Mappings

Ook wel eens last van 'disconnected network drive'?

Ik wel. Nadat de harde schijf van mijn server vervangen is, kreeg ik het probleem dat Windows niet altijd mijn netwerk drives goed herkend. Nou lijkt dat op zich geen probleem, want zodra je op de drive klikt via de explorer koppelt windows de drive automatisch aan. Maar ja, dat is alleen als je hem met de hand aanklikt.

Het gaat fout bij bijvoorbeeld backup scriptjes die automatisch bij aanmelding draaien. Of je start eerst je IDE op, alle bestanden die de vorige keer openstonden worden dan vergeten, of je krijgt een vracht foutmeldingen, afhankelijk van de IDE. Dat kan beter denk ik dan!

Door een batch file te draaien bij het inloggen los je dit probleem op. De batch file maakt de drive mappings opnieuw aan m.b.v. het commando 'net use'. Het probleem met dit commando is dat het niet wacht totdat het gelukt is. Als je netwerk nog niet klaar is faalt 'net use' met een error code en ben je dus nog niks opgeschoten. Daarbij kan het ook nog voorkomen dat de drive mapping wel aangemaakt wordt, maar dat de drive nog steeds niet als 'connected' gezien wordt. Hier komt de /e vlag van de explorer van pas. Deze zorgt er namelijk voor dat je explorer onzichtbaar zijn werk doet en het handmatige klikken op je drive(s) voor je kan doen. Overigens is deze vlag in Vista niet meer aanwezig. Het goede nieuws is dat je in Vista het extra explorer commando niet nodig heeft en met alleen een 'net use' het prima doet.

Om de drive mapping aan te maken/herstellen:

net use U: \\server\%USERNAME% /PERSISTENT:YES

Vervang server door de naam of het ip adres van je server. Ik gebruik U: als mijn home drive, vandaar dat de share naam dezelfde is als mijn windows gebruikers naam. Vervolgends automatiseer je het handmatige klikken:

explorer /e,/root,U:\.recycle,/inproc

Zorg dat je dit doet op een bestaande subfolder, in mijn geval bestaat '.recycle' altijd op alle netwerk drives.

Voordat je dit loslaat moet je dus eerst even wachten totdat de windows netwerk stack opgestart is. Maar ja, hoe wacht je in een windows batch file? Dat kan door het ping commando te misbruiken; je laat hem pingen naar een niet bestaand maar wel geldig adres en je geeft een timeout mee:

ping -n 1 -w 1000 10.0.0.0

Bovenstaande wacht 1000 ms, oftwel 1 seconde.

Het volgende laat je zien hoe de complete batch file eruit ziet. Ik heb nog wat aanvullingen gemaakt zodat hij niet onnodig wacht, maar wel lang genoeg zodat alle resources beschikbaar zijn:

@echo off

if exist U:\.recycle if exist K:\.recycle goto End

:SleepAWhile
ping -n 1 -w 1000 10.0.0.0

if exist U:\.recycle if exist K:\.recycle goto End

:WaitForNet
ping -n 1 -w 1000 server
if errorlevel 1 goto WaitForNet

net use U: \\server\%USERNAME% /PERSISTENT:YES
explorer /e,/root,U:\.recycle,/inproc

net use K: \\server\Bigdisk /PERSISTENT:YES
explorer /e,/root,K:\.recycle,/inproc

:End

Sla dit op in een bestand 'mapfix.cmd' en sla het op in de 'C:\Documents and Settings\All Users\Start Menu\Programs\Startup' folder zodat het elke keer bij het inloggen uitgevoerd wordt.