Benutzer mit den meisten Antworten
Nummer des Datenträgers ermitteln

Frage
-
Hi Community,
ich möchte per VB-Code die Nummer des Datenträgers ermitteln, auf dem sich ein bestimmtes Laufwerk befindet.
Beispielsweise befindet sich laut Anzeige der Datenträgerverwaltung das Laufwerk C: auf Datenträger 0.
Visual Studio 2012, Windows 10 - 64 Bit
Weiß jemand Rat?
Darüber hinaus ist mir aufgefallen, dass meine permanent angesteckte externe USB-Festplatte beim Einschalten des PC's mal als Datenträger 2 und mal als Datenträger 5 verbunden wird. Vermutlich je nachdem, wie fix die Platte sich meldet.
Ist die Datenträgernummer irgendwie konfigurierbar, so dass die Platte immer die gleiche Nummer erhält?
LG Gruß
Jörg
Antworten
-
-
Hallo Jörg,
du kannst die gewünschten Informationen über WMI (System.Management) ermitteln.
Wenn du dir die Ausgabe anschaust, wirst du alle möglichen Infos finden und die benötigten herauspicken können.
Vielleicht hilft das weiter...
GrußImports System.Management Public Class MyDisks Public Sub GetInfos() Dim disks As Dictionary(Of String, String()) = GetProperties(WMI_Items.Win32_DiskDrive) For Each kvp As KeyValuePair(Of String, String()) In disks Console.WriteLine($"ID: {kvp.Key}:") If kvp.Value IsNot Nothing Then For Each value As String In kvp.Value Console.WriteLine($" Value: {value}") Next Else Console.WriteLine($" Value: Nothing") End If Next End Sub
Public Enum WMI_Items Win32_CDROMDrive Win32_DiskDrive Win32_FloppyDrive Win32_PhysicalMedia Win32_TapeDrive End Enum Public Shared Function GetProperties(ByVal WMI_Item As WMI_Items) As Dictionary(Of String, String()) Dim MOS As ManagementObjectSearcher = New ManagementObjectSearcher("Select * from " & WMI_Item.ToString) Dim MOC As ManagementObjectCollection = MOS.Get Dim MO As ManagementObject Dim PD As PropertyData Dim HWList As New Dictionary(Of String, String()) For Each MO In MOC For Each PD In MO.Properties If Not PD.Value Is Nothing Then If HWList.ContainsKey(PD.Name) = False Then HWList.Add(PD.Name, GetProperty(WMI_Item, PD.Name)) End If End If Next Next Return HWList End Function Public Shared Function GetProperty(ByVal WMI_Item As WMI_Items, ByVal PropertyName As String) As String() Dim MOS As ManagementObjectSearcher = New ManagementObjectSearcher("Select " & PropertyName & " from " & WMI_Item.ToString) Dim MOC As ManagementObjectCollection = MOS.Get Dim MO As New ManagementObject Dim Values As New List(Of String) Try For Each MO In MOC Values.Add(MO.GetPropertyValue(PropertyName)) Next Catch ex As Exception Return Nothing End Try Return Values.ToArray End Function End Class
Alle Antworten
-
Hallo Joerg 55,
Ich bin nicht sicher, ob Dir das helfen wurde, aber sieh Dir folgende Artikel an:
Gruß
Aleksander
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hi Aleksander,
nein, das hilft leider nicht. Die dort aufgeführten Funktionen stehen alle im Zusammenhang mit logischen Laufwerken, denen ein Laufwerksbuchstabe zugeordnet ist.
Ich benötige eine Aufstellung der physikalischen Datenträger 0..n mit den Namen der darauf befindlichen logischen Laufwerke. Schön wären auch noch Partitionsdaten. Wie viele, wie groß, Namen...
Gruß Jörg
-
-
Hallo Jörg,
du kannst die gewünschten Informationen über WMI (System.Management) ermitteln.
Wenn du dir die Ausgabe anschaust, wirst du alle möglichen Infos finden und die benötigten herauspicken können.
Vielleicht hilft das weiter...
GrußImports System.Management Public Class MyDisks Public Sub GetInfos() Dim disks As Dictionary(Of String, String()) = GetProperties(WMI_Items.Win32_DiskDrive) For Each kvp As KeyValuePair(Of String, String()) In disks Console.WriteLine($"ID: {kvp.Key}:") If kvp.Value IsNot Nothing Then For Each value As String In kvp.Value Console.WriteLine($" Value: {value}") Next Else Console.WriteLine($" Value: Nothing") End If Next End Sub
Public Enum WMI_Items Win32_CDROMDrive Win32_DiskDrive Win32_FloppyDrive Win32_PhysicalMedia Win32_TapeDrive End Enum Public Shared Function GetProperties(ByVal WMI_Item As WMI_Items) As Dictionary(Of String, String()) Dim MOS As ManagementObjectSearcher = New ManagementObjectSearcher("Select * from " & WMI_Item.ToString) Dim MOC As ManagementObjectCollection = MOS.Get Dim MO As ManagementObject Dim PD As PropertyData Dim HWList As New Dictionary(Of String, String()) For Each MO In MOC For Each PD In MO.Properties If Not PD.Value Is Nothing Then If HWList.ContainsKey(PD.Name) = False Then HWList.Add(PD.Name, GetProperty(WMI_Item, PD.Name)) End If End If Next Next Return HWList End Function Public Shared Function GetProperty(ByVal WMI_Item As WMI_Items, ByVal PropertyName As String) As String() Dim MOS As ManagementObjectSearcher = New ManagementObjectSearcher("Select " & PropertyName & " from " & WMI_Item.ToString) Dim MOC As ManagementObjectCollection = MOS.Get Dim MO As New ManagementObject Dim Values As New List(Of String) Try For Each MO In MOC Values.Add(MO.GetPropertyValue(PropertyName)) Next Catch ex As Exception Return Nothing End Try Return Values.ToArray End Function End Class
-
Hi K.
besten Dank, anhand deines Codebeispiels bekomme ich die für mich relevanten Daten auf jeden Fall schon einmal angezeigt. Genauer schauen muss ich noch, wie ich direkt auf die von mir benötigten Informationen zugreifen kann. Aber das ist nur noch Fleißsache.
Falls eventuell Mitleser den Code ausprobieren möchten sei noch gesagt, dass sich in die oberste Prozedur "GetInfos()" noch ein kleiner Fehlerteufel eingeschlichen hat (Reste von C# vermutlich :-) )
So funktioniert es auch in VB:
Public Sub GetInfos()
Dim disks As Dictionary(Of String, String()) = GetProperties(WMI_Items.Win32_DiskDrive)
For Each kvp As KeyValuePair(Of String, String()) In disks
Console.WriteLine("ID: " & kvp.Key)
If kvp.Value IsNot Nothing Then
For Each value As String In kvp.Value
Console.WriteLine(" Value: " & value)
Next
Else
Console.WriteLine(" Value: Nothing")
End If
Next
End SubLG Joerg
-
Hi LBB,
das von dir angegebene Beispiel greift auf die gleichen Ressourcen zu, die in dem unten stehenden Codebeispiel von K. Pater gezeigt werden (oder umgekehrt :-) ) Auf jeden Fall liefert es die von mir benötigten Daten.
Besten Dank
Gruß Joerg