[ad_1]
J’essaie d’obtenir la disposition/le schéma de partition d’un disque USB en utilisant la lettre de lecteur. J’aimerais savoir si le disque est MBR ou GPT. Je peux utiliser Powerhell mais la récupération des informations prend trop de temps. J’ai regardé MSFT_Disk et MSFT_Partition mais je ne sais pas comment les utiliser.
Ce que j’ai essayé :
Dim driveLetter As String = USB1 & ":" ' Replace with your drive letter Dim searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_DiskPartition where DriveLetter = '" & driveLetter & "'") For Each queryObj As ManagementObject In searcher.Get() Dim partitionStyle As String = queryObj("DriveType").ToString() If partitionStyle = "3" Then PartitionType = ("GPT") MsgBox(partitionStyle) ElseIf partitionStyle = "2" Then PartitionType = ("MBR") MsgBox(partitionStyle) Else PartitionType = ("NR") MsgBox(partitionStyle) End If Next
Solution 2
Premièrement, la classe Win32_DiskPartition n’a pas de propriété “DriveLetter”, cette requête échouera à chaque fois.
Ensuite, les lettres de lecteur sont des disques logiques et non physiques. Un seul disque physique peut contenir plusieurs disques logiques, chacun étant affecté à une instance Win32_DiskPartition via la classe Win32_LogicalDiskToPartition.
Puisque WMI n’utilise pas de requête JOIN, vous devez la réécrire en tant que requête ASSOCIATORS OF, comme ceci :
ASSOCIATORS OF {Win32_LogicalDisk.DeviceId='E:'} WHERE ResultClass=Win32_DiskPartition
Cette requête vous obtiendra l’objet Win32_DiskPartition pour la lettre de lecteur spécifiée.
Solution 1
Function GetDiskPartitionType(diskDrive As String) As String Dim upperCaseDiskLetter As String = diskDrive.Substring(0, 1).ToUpper() Dim wmiQuery As String = $"SELECT DiskNumber, GptType, MbrType FROM MSFT_Partition WHERE DriveLetter='{upperCaseDiskLetter}'" Dim scope As New ManagementScope("\\localhost\ROOT\Microsoft\Windows\Storage") Dim partitionSearcher As New ManagementObjectSearcher(scope, New ObjectQuery(wmiQuery)) For Each partition As ManagementObject In partitionSearcher.Get() Dim gptType As String = partition("GptType")?.ToString() Dim mbrType As Integer = Convert.ToInt32(partition("MbrType")) If Not String.IsNullOrEmpty(gptType) Then Return "GPT" ElseIf mbrType <> 0 Then Return "MBR" Else Return "Unknown" End If Next Return "Unknown" End Function
[ad_2]
コメント