quijote
Goto Top

Prüfen ob Laufwerk in Verwendung ist

Hi,

ich muss Abfragen ob auf ein Laufwerk zugegeriffen wird. Z.B. wenn momentan ein Programm darauf zugreift.
Ich benötige es für ein Script das ein LW nach 10 min. aushängt, wenn es gerade nicht verwendet wird.

Gibt es ein Befehl/Skript mit dem man das machen kann?


Als Beispiel:

Mount Z:
Warte 10 min.
Prüfe ob LW in Verwendung.

Wenn nicht: unmount Z:
Ansonsten: warte 10 min. ...

Content-Key: 188186

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

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

Member: AndreasHoster
AndreasHoster Jul 18, 2012 at 13:11:38 (UTC)
Goto Top
Handle kann Dir die File Handles der Programme auslesen.
Siehe http://technet.microsoft.com/de-de/sysinternals/bb896655.aspx

Damit könnte man sehen, ob noch jemand was im Zugriff habt.
handle -a | find "z:\" /i  
if errorlevel 1 goto KeinZugriff

Wenn es ein Netzwerkshare ist, dann sieht es etwas anders aus:
handle -a | find "\Device\LanmanRedirector\;Z:" /i  
if errorlevel 1 goto KeinZugriff
Member: Quijote
Quijote Jul 20, 2012 at 15:31:11 (UTC)
Goto Top
Danke für die Hilfe, aber das klappt leider nicht.

Wenn ich die Errorlevel mit If abfrage, kommt sowohl 1 als auch 0 dabei raus.
Ich habe das mit echo ausprobiert.
Member: AndreasHoster
AndreasHoster Jul 23, 2012 at 08:00:13 (UTC)
Goto Top
Der Errorlevel kann nicht gleichzeitig 0 und 1 sein.
Könntest Du mal näher erläutern was Du da meinst, bzw. am Besten den Code posten, mit dem Du abfragst?
Member: Quijote
Quijote Jul 27, 2012 at 20:12:32 (UTC)
Goto Top
Tut mir leid, hat etwas gedauert.

Mein Testscript ist folgendes:

start LW_X.bat

timeout /T 5 /NOBREAK

handle -a | find "X:\" /i  
if errorlevel 1 goto KeinZugriff
if errorlevel 0 goto Zugriff

:KeinZugriff
echo derzeit kein Zugriff

:Zugriff
echo Laufwerk ist besetzt


PAUSE

Ausgeben tut die Kommandozeile beides, also "derzeit kein Zugriff" und "Laufwerk ist besetzt". Egal ob ich jetzt darauf zugreife oder nicht.
Member: bastla
bastla Jul 27, 2012 updated at 21:56:44 (UTC)
Goto Top
Hallo Quijote!
Ausgeben tut die Kommandozeile beides, also "derzeit kein Zugriff" und "Laufwerk ist besetzt".
Das ist zumindest für den Fall, dass ein Zugriff erfolgt, klar - hast Du Dir überlegt, was nach Zeile 10 in weiterer Folge passiert?
Ich würde das ab Zeile 5 eher so versuchen:
set "LW=X:"  
handle "%LW%\ | findstr /i "%LW%\\" && (  
    echo Zugriff
) || (
    echo Kein Zugriff
)
Ev sollten auch noch "X:\$Extend\$ObjId" und "X:\System Volume Information\tracking.log" ignoriert werden - dann als Zeile 2:
handle %LW%\|findstr /ivc:"%LW%\\System Volume Information\\tracking.log" /c:"%LW%\\\$Extend\\\$ObjId"|findstr /i "%LW%\\" && ( 
Die Erklärung für die zusätzlichen "\" findest Du übrigens mit "findstr /?" ...

Grüße
bastla
Member: Quijote
Quijote Jul 28, 2012 at 09:17:34 (UTC)
Goto Top
Hi bastla!

Ich habe zwar nicht alles vom Code verstanden, aber wenn ich den so übernehme bekomme ich am Ende immer die Meldung "Kein Zugriff". Unabhängig davon ob ich darauf zugreife oder nicht.

Gruß
Quijote
Member: bastla
bastla Jul 28, 2012 updated at 09:32:05 (UTC)
Goto Top
Hallo Quijote!

In die Zeile 2 ist ein Anführungszeichen reingerutscht - sollte besser so aussehen:
handle %LW%\ | findstr /i "%LW%\\" && (
Ich habe zwar nicht alles vom Code verstanden
handle -a | find "X:\" /i
kombinieren ...

Grüße
bastla
Member: Quijote
Quijote Jul 29, 2012 at 12:34:18 (UTC)
Goto Top
Zitat von @bastla:
In die Zeile 2 ist ein Anführungszeichen reingerutscht - sollte besser so aussehen:
handle %LW%\ | findstr /i "%LW%\\" && (

Habe ich eben ausprobiert, aber bekomme trotzdem immer die Meldung "Kein Zugriff". Funktioniert das denn bei dir?

Vielen Dank und Grüße

Quijote
Member: bastla
bastla Jul 29, 2012 at 15:52:56 (UTC)
Goto Top
Hallo Quijote!
Funktioniert das denn bei dir?
Ja; allerdings benötigt "handle" Admin-Rechte - wenn Du also nicht mit einem Admin-User testest, würde das Dein Ergebnis erklären ...

Grüße
bastla
Member: Quijote
Quijote Jul 31, 2012 at 13:41:07 (UTC)
Goto Top
Leider bringt das auch nichts. Habe es nochmal mit einem USB-Stick gestestet (vielleicht liegts ja am Laufwerk) aber klappt auch nicht.