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-Key: 115426

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

Printed on: April 19, 2024 at 12:04 o'clock

Mitglied: 77559
77559 May 06, 2009 at 16:22:19 (UTC)
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
Member: MonoTone
MonoTone May 07, 2009 at 13:39:37 (UTC)
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
Mitglied: 77559
77559 May 07, 2009 at 17:49:22 (UTC)
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
Member: andrehh
andrehh May 08, 2009 at 06:08:51 (UTC)
Goto Top
Vielen Dank an euch beide, habt mir sehr geholfen face-smile