andrehh
Goto Top

Laufwerksbuchstaben auslesen

Laufwerksbuchstaben von lokalen Partitionen auslesen und in eine Textdatei übergeben

Hallo Zusammen,

ich muss mir gerade den Kopf über folgendes Problem zerbrechen.
Ich suche nach einer Möglichkeit die Laufwerksbuchstaben von lokalen Partitionen (keine Netzlaufwerke o.ä.) auszulesen und diese in eine Textdatei zu übergeben. Ich hab schon im Internet gesucht und bin dabei auf unten angehängtes Script gestoßen. Das Script funktioniert unter XP so wie es soll, doch unter Vista oder Server 2008 als Beispiel, wird keine Ausgabe generiert. Ich habs mit meinen primitiven Programmierkenntnissen gerade so hinbekommen die Ausgabe in eine Textdatei zu schicken, allerdings weiß ich nicht wo das Problem unter Vista sein könnte.
Vielen Dank schonmal im Voraus face-smile

Option Explicit
Dim oWMI
Dim fso
Dim oLog

Set oWMI = GetObject ("winmgmts:")  
Call ScanHardDisks

Sub ScanHardDisks

        Dim oDisk
        Dim sTxt
        
        For Each oDisk In oWMI.InstancesOf("Win32_DiskDrive")  

                If IsHardDisk(oDisk) Then                       
                        
                        Dim oParts
                        Dim oPart       
                        
                        sTxt = sTxt & "Festplatte #" & oDisk.Index  


                        Set oParts = GetDiskParts(oDisk)        
                        
                        For Each oPart In oParts
                                sTxt = sTxt & GetDriveLetters (oPart)   
                        Next            
                        
                        sTxt = sTxt & vbCrlf            
                        
                End If  
        
        Next
        WSH.Echo sTxt
        
        set fso = CreateObject("Scripting.FileSystemObject")  
			  set oLog = fso.CreateTextFile("hdd.txt",true)  
			  oLog.Write sTxt
			  oLog.close

End Sub

Function IsHardDisk (oDisk)

        IsHardDisk = False

        If Not IsNull(oDisk.MediaType) Then
                IsHardDisk = StrComp (oDisk.MediaType, _
                        "Fixed" & vbTab & "hard disk media") = 0  
        End If

End Function

Function GetDiskParts (oDisk)

        Set GetDiskParts = oWMI.ExecQuery ("ASSOCIATORS OF " _  
                & "{Win32_DiskDrive.DeviceID='" & oDisk.DeviceID _  
                & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition")  

End Function

Function GetLogicalDisks (oPart)

        Set GetLogicalDisks = oWMI.ExecQuery ("ASSOCIATORS OF " _  
                & "{Win32_DiskPartition.DeviceID='" & oPart.DeviceID _  
                & "'} WHERE AssocClass=Win32_LogicalDiskToPartition")  

End Function

Function GetDriveLetters (oPart)

        Dim oLogics
        Dim oLogic      

        Set oLogics = GetLogicalDisks(oPart)

        For Each oLogic In oLogics
                GetDriveLetters = GetDriveLetters & " " & oLogic.DeviceID  
        Next    

End Function

Content-ID: 115426

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

Ausgedruckt am: 26.11.2024 um 18:11 Uhr

77559
77559 06.05.2009 um 18:22:19 Uhr
Goto Top
Hallo,
im Code werden wohl einige Abkürzungen benutzt, die so in Vista /windows 7 nicht mehr funktionieren.
oWMI.InstancesOf("Win32_DiskDrive")
Mit zusätzlichen Object Variablen ist das wahrscheinlich hinzubekommen, interessiert mich - ich nehme es mal auf meine Liste.

Gruß
LotPings
MonoTone
MonoTone 07.05.2009 um 15:39:37 Uhr
Goto Top
Set fso = CreateObject("Scripting.FilesystemObject")  
Set f = fso.CreateTextFile("D:\beispiel.txt", 8, True)  

strComputer = "."  
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk",,48)  
dim counter
counter = 1
For Each objItem in colItems
	If LCase(objITem.description) = "lokale festplatte" Then  
		WScript.Echo objItem.Name
'oder in txt file  
f.writeline "Laufwerkbuchstabe " & counter & ": " & objItem.Name   
counter = counter +1
End If
Next

So liest du die Laufwerksbuchstaben aus.
Habs auf XP und auf Server2008 getestet und klappt.
(sollte daher auch auf Vista laufen)

Ich hoffe das ist das was du suchst.
Gruss Mono
77559
77559 07.05.2009 um 19:49:22 Uhr
Goto Top
Hallo andrehh,

Microsoft hat wohl in den Tiefen der WMI Texte geändert,
Bei mir unter Windows 7 lief das Script nachdem ich die Abfrage aus Zeile 50
    "Fixed" & vbTab & "hard disk media") = 0 
geändert habe in
    "Fixed hard disk media") = 0 

Damit der Code universell läuft müsste man die If abfrage umbauen mit RegExp oder ähnlich,
Mag ich jetzt nicht.

Gruß
LotPings
andrehh
andrehh 08.05.2009 um 08:08:51 Uhr
Goto Top
Vielen Dank an euch beide, habt mir sehr geholfen face-smile