[ad_1]
Saya mencoba mendapatkan tata letak/skema partisi disk USB menggunakan huruf drive. Saya ingin mengetahui apakah disk tersebut MBR atau GPT. Saya dapat menggunakan Powerhell tetapi memerlukan waktu terlalu lama untuk mendapatkan kembali informasinya. Saya telah melihat MSFT_Disk dan MSFT_Partition tetapi saya tidak tahu cara menggunakannya.
Apa yang saya coba:
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
Solusi 2
Pertama, kelas Win32_DiskPartition tidak memiliki properti “DriveLetter”, kueri tersebut akan selalu gagal.
Selanjutnya, huruf drive adalah Logical Disk, bukan fisik. Satu disk fisik dapat berisi beberapa disk logis, masing-masing ditetapkan ke instans Win32_DiskPartition melalui kelas Win32_LogicalDiskToPartition.
Karena WMI tidak menggunakan query JOIN, Anda harus menulis ulang sebagai query ASSOCIATORS OF, seperti ini:
ASSOCIATORS OF {Win32_LogicalDisk.DeviceId='E:'} WHERE ResultClass=Win32_DiskPartition
Kueri ini akan memberi Anda objek Win32_DiskPartition untuk huruf drive yang ditentukan.
Solusi 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]
コメント