[ad_1]
Estoy intentando obtener el diseño/esquema de partición de un disco USB usando la letra de la unidad. Me gustaría saber si el disco es MBR o GPT. Puedo usar Powerhell pero lleva demasiado tiempo recuperar la información. He mirado MSFT_Disk y MSFT_Partition pero no sé cómo usarlos.
Lo que he probado:
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
Solución 2
Primero, la clase Win32_DiskPartition no tiene una propiedad “DriveLetter”, esa consulta fallará siempre.
A continuación, las letras de las unidades son discos lógicos, no físicos. Un único disco físico puede contener varios discos lógicos, cada uno asignado a una instancia de Win32_DiskPartition a través de la clase Win32_LogicalDiskToPartition.
Dado que WMI no utiliza una consulta JOIN, debe reescribirla como una consulta ASOCIADORES DE, así:
ASSOCIATORS OF {Win32_LogicalDisk.DeviceId='E:'} WHERE ResultClass=Win32_DiskPartition
Esta consulta le proporcionará el objeto Win32_DiskPartition para la letra de unidad especificada.
Solución 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]
コメント