Auf einem Dateiserver, der sehr viele Freigaben enthält, ist es nicht immer einfach herauszufinden, ob ein bestimmter Ordner freigegeben ist oder nicht. Oft wird man nicht drumherumkommen, eine RDP-Verbindung zu dem Server zu öffnen und im Explorer nachzusehen, oder man bemüht die Computerverwaltung mit Verbindung auf den Server und schaut unter "Freigaben" nach.
Das folgende Skript bietet eine Alternative. Es liest über WMI die Freigaben eines beliebigen Servers aus uns schreibt die Namen sowie die jeweils freigegebenen Ordner in zwei Dictionary-Objekte. Auf diese Weise kann mit recht einfachen Abfragen festgestellt werden, ob bestimmte Ordner freigegeben sind, und wenn ja, unter welchem Namen.
Das Skript
-
' Beispielaufrufe
-
-
Set osP = CreateObject("Scripting.Dictionary") ' Freigaben über den Pfad
-
Set osN = CreateObject("Scripting.Dictionary") ' Freigaben über Namen
-
ok = ShareDictsInit( ".", osN,osP) ' Listen einlesen
-
-
text = ""
-
for each share in osP
-
text = text & share & ": " & osP.Item(share) &vbCrLf
-
NEXT
-
-
msgbox text
-
-
text = ""
-
for each share in osN
-
text = text & share & ": " & osN.Item(share) &vbCrLf
-
NEXT
-
-
msgbox text
-
-
'#########################################################
-
-
Function ShareDictsInit(sServer, oShareNameDict, oSharePathDict)
-
' Freigaben in Dictionary ablegen
-
' Autor: Martin Resch, http://ml-tipps.de, 6/2006
-
-
' Parameter: Servername (String), angelegte Dictionary-Objekte nach Name
-
' bzw. Pfad
-
' Rueckgabe: "ok" oder Fehlerbeschreibung
-
-
const HKEY_LOCAL_MACHINE = &H80000002
-
ShareDictsInit = "ok"
-
ON ERROR RESUME NEXT
-
Set FSO = CreateObject("Scripting.FileSystemObject")
-
-
-
-
Set oReg=GetObject("winmgmts:" _
-
& "{impersonationLevel=impersonate}!\\" &_
-
sServer & "\root\default:StdRegProv")
-
IF err.Number <> 0 THEN
-
ShareDictsInit = err.Description
-
exit function
-
END IF
-
-
-
strKeyPath = "SYSTEM\CurrentControlSet\Services\LanManServer\Shares"
-
oReg.EnumValues HKEY_LOCAL_MACHINE, _
-
strKeyPath, arrValueNames, arrValueTypes
-
-
For i=0 to UBound(arrValueNames)
-
oReg.GetMultiStringValue _
-
HKEY_LOCAL_MACHINE, _
-
strKeyPath,arrValueNames(i), _
-
arrValues
-
shname = arrValueNames(i)
-
shdir = split(arrValues(2),"=")(1)
-
-
-
IF Mid(shdir,2,1) = ":" THEN
-
If not fso.FolderExists(shdir) Then
-
shDir = "" ' ungueltige Freigabe
-
ELSE
-
IF not oSharePathDict.exists(shdir) THEN
-
oSharePathDict.Add shDir, shName
-
ELSE
-
oSharePathDict.Item(shDir) = _
-
-
oSharePathDict.Item(shDir) & "|" & shName
-
END IF
-
END IF
-
End If
-
oShareNameDict.Add shName, shDir
-
-
IF err.Number <> 0 THEN
-
ShareDictsInit = err.Description
-
exit function
-
END IF
-
-
Next
-
END function
http://faq-o-matic.net/?p=632