[ad_1]
أحاول الحصول على تخطيط/مخطط القسم لقرص USB باستخدام حرف محرك الأقراص. أرغب في معرفة ما إذا كان القرص MBR أو GPT. يمكنني استخدام Powerhell ولكن استعادة المعلومات تستغرق وقتًا طويلاً. لقد ألقيت نظرة على MSFT_Disk وMSFT_Partition ولكني لا أعرف كيفية استخدامها.
ما حاولت:
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
الحل 2
أولاً، لا تحتوي فئة Win32_DiskPartition على خاصية “DriveLetter”، وسيفشل هذا الاستعلام في كل مرة.
بعد ذلك، أحرف محركات الأقراص هي أقراص منطقية، وليست أقراص فعلية. يمكن أن يحتوي قرص فعلي واحد على أقراص منطقية متعددة، يتم تعيين كل منها لمثيل Win32_DiskPartition من خلال فئة Win32_LogicalDiskToPartition.
نظرًا لأن WMI لا يستخدم استعلام JOIN، فيجب عليك إعادة كتابته كاستعلام ASSOCIATORS OF، مثل هذا:
ASSOCIATORS OF {Win32_LogicalDisk.DeviceId='E:'} WHERE ResultClass=Win32_DiskPartition
سيوفر لك هذا الاستعلام كائن Win32_DiskPartition لحرف محرك الأقراص المحدد.
الحل 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]
コメント