[ad_1]
मैं ड्राइव अक्षर का उपयोग करके USB डिस्क का विभाजन लेआउट/स्कीम प्राप्त करने का प्रयास कर रहा हूँ। मैं यह जानना चाहता हूं कि डिस्क एमबीआर है या जीपीटी। मैं पॉवरहेल का उपयोग कर सकता हूं लेकिन जानकारी वापस पाने में बहुत समय लगता है। मैंने 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_LogicalDiskToPartition क्लास के माध्यम से Win32_DiskPartition इंस्टेंस को सौंपा गया है।
चूंकि WMI JOIN क्वेरी का उपयोग नहीं करता है, इसलिए आपको इसे क्वेरी के एसोसिएटर्स के रूप में फिर से लिखना होगा, जैसे:
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]
コメント