0cool
Goto Top

VBScript Status eines Netzlaufwerkes abfragen

Hey Leute,

erst mal Danke für eure Hilfe.

ein paar vorab Infos bevor ich zu meiner frage komme:

OS: Vista
Scriptsprache: Visual Basic Script
Netzlaufwerk: Es dreht sich immer um den gleichen Laufwerksbuchstaben aber bei verschiedenen Anwender. Für das Netzlaufwerk ist die Offline Syncronisation aktiviert


So jetzt meine Frage.

Wie kann ich den Status des Netzlaufwerkes anzeigen. D. H. ich will wissen ob das Netzlaufwerk auf offline oder online geschaltet ist.


Gruß

0cool

Content-ID: 167691

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

Ausgedruckt am: 25.11.2024 um 10:11 Uhr

vossi31
vossi31 08.06.2011 um 15:15:19 Uhr
Goto Top
Hallo Ocool,

keine Ahnung wie das geht, aber vielleicht kannst du stattdessen die Existenz einer (versteckten) Datei abfragen, die du als Dummy anlegst.

Henning
TsukiSan
TsukiSan 08.06.2011 um 15:15:58 Uhr
Goto Top
Hallo Ocool,

würde dir dies genügen?
aktIp = "192.168.0.69" ' oder "PC-Name"  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
If objFSO.FolderExists("\\" & aktIp & "\MeineFreigabe" ) Then  
    				Wscript.echo  "Netzwerkpfad ist online."  
Else
    				Wscript.echo  "Netzwerkpfad ist offline."  
End If

Gruss
Tsuki
0cool
0cool 08.06.2011 um 15:31:04 Uhr
Goto Top
Danke für eure Antworten.

Beide Vorschläge gehen leider nicht, da das Netzlaufwerk, wenn keine Netzwerkverbindung besteht im Offline Modus unter dem selben Laufwerksnamen verfügbar ist.

Wenn das ganze über die WMI verwirklichbar ist, bin ich auch zufrieden.

Gruß

0cool
Friemler
Friemler 08.06.2011 um 15:32:32 Uhr
Goto Top
Hallo 0cool,

evtl. nutzt die Eigenschaft IsReady des Drive-Objekts etwas:
strDrvPath = "T:"  

Set objFSO   = CreateObject("Scripting.FileSystemObject")  
Set objDrive = objFSO.GetDrive(strDrvPath)

If objDrive.IsReady Then
  strMsg = strDrvPath & "-Drive is Ready."  
Else
  strMsg = strDrvPath & "-Drive is not Ready."  
End If

WScript.Echo strMsg

Gruß
Friemler
TsukiSan
TsukiSan 09.06.2011 um 03:25:47 Uhr
Goto Top
... und falls Friemler seine Variante auch nichts hilft was ich nicht glauben möchte
hätte ich noch einen anderen Vorschlag:
Ping doch einfach das Gegenüber in bestimmten Abständen an und finde so heraus, ob's on - oder offline ist
Dim Start
Start = 1

do while Start = 1
strMachines = "192.168.0.11;PC-Name1;PC-Name2;192.168.99"  
aMachines = split(strMachines, ";")  
 
For Each machine in aMachines
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
        ExecQuery("select * from Win32_PingStatus where address = '"_  
            & machine & "'")  
    For Each objStatus in objPing
        If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then 
            WScript.Echo("Computer " & machine & " ist offline")   
        Else
	    WScript.Echo("Computer " & machine & " ist online")  
	End If
    Next
Next
Wscript.Sleep 60000
Loop

Gruss
Tsuki
0cool
0cool 09.06.2011 um 08:16:22 Uhr
Goto Top
Danke für eure Antworten, doch leider hilft mir das alles nicht weiter.

In Vista kann bei einer bestehenden Netzwerkverbindung das Netzlaufwerk offlne geschaltet werden, so als wenn die Netzverbindung offlne ist. In diesem Fall greift die offline Syncronisation und ich kann Trozdem auf die Dateine zugreifen.

Genau dies will ich abfangen.

Beim Prüfen des Netzlaufwerkes, soll er ausgeben in welchem Modus (offline / online) das Netzalufwerk ist (egal ob die Netzverbindung steht oder nicht).

Der Hintergrund folgender: Ich habe ein Backup VBScript geschrieben, dass die Daten auf ein Netzlaufwerk sichert. Da das Script bei den Anwendern ausgeführt wird und es schon vorkam das ein Anwender das Netzlaufwerk auf offline geschaltet hat bevor das Script startete. Danach wurde sein rechner platt gemacht. Blöderweise fand beim runterfahren keine Synchronisation statt.
Um so einen Fall abzufangen, bennötige ich die Abfrage über den Status des Netzlaufwerkes.

Gruß

0cool
Friemler
Friemler 09.06.2011 um 16:20:06 Uhr
Goto Top
Hallo 0cool,

teste mal folgende WMI-Abfrage jeweils bei Netzlaufwerk auf online/offline geschaltet:
strComputer = "."  
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OfflineFilesItem WHERE ItemType=2",,48)  

For Each objItem In colItems
  Wscript.Echo "ItemName                     : " & objItem.ItemName  
  Wscript.Echo "ItemPath                     : " & objItem.ItemPath  
  Wscript.Echo "ItemType                     : " & objItem.ItemType  

  If Not IsObject(objItem.ConnectionInfo) Then
    Wscript.Echo "ConnectionInfo: <NULL>"  
  Else
    Wscript.Echo "ConnectionInfo.ConnectState  : " & objItem.ConnectionInfo.ConnectState  
    Wscript.Echo "ConnectionInfo.OfflineReason : " & objItem.ConnectionInfo.OfflineReason  
  End If
Next

Die Codes für ItemType in Zeile 4 sind laut MSDN folgendermaßen:
  • File=0
  • Directory=1
  • Share=2
  • Server=3

Die Codes für ConnectState in Zeile 14 laut MSDN:
  • Unknown=0
  • Offline=1
  • Online=2
Es gibt aber noch andere Codes, die auf der MSDN-Seite nicht dokumentiert sind, z.B. 4.

Daraus solltest Du Dir was stricken können.


Mal so nebenbei: Warum erstellst Du das Backup auf einer Netzwerkfreigabe, die die User zum arbeiten brauchen (sonst müsstest Du die Dateien ja nicht offline verfügbar machen)? Evtl. den Prozess ändern, dann kommen solche Fälle garnicht vor.

Gruß
Friemler
0cool
0cool 08.02.2012 um 21:52:27 Uhr
Goto Top
Danke für eure Antworten.

Das Skript von Friemler hilft mir.

Gruß

0cool