2015-08-13 113 views
0

如何轉義字符我嘗試使用下面的代碼來創建WMI查詢:在WMI查詢

string query = "ASSOCIATORS OF {Win32_DiskDrive.PNPDeviceID='" + device["PNPDeviceID"].ToString().Replace(@"\", @"\\") 
         + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; 

但如果query變量看起來像ASSOCIATORS OF {Win32_DiskDrive.PNPDeviceID='USBSTOR\\DISK&VEN_FLASH&PROD_DRIVE_SM_USB20&REV_1100\\7214030310011150&0'} WHERE AssocClass = Win32_DiskDriveToDiskPartition它給我「無效的對象路徑」異常。

爲什麼?我究竟做錯了什麼?我該如何解決它?

什麼是適當的方法來逃避WMI查詢中的所有字符呢?

在此先感謝。

回答

1

錯誤屬性選擇查詢ASSOCIATORS OF。所述Win32_DiskDriveToDiskPartition類表示一個磁盤驅動器和一個分區存在於它與下一個關係屬性之間的關聯:

==>wmic path Win32_DiskDriveToDiskPartition get /value 

Antecedent="\\PC\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE1"" 
Dependent="\\PC\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #0"" 

Antecedent="\\PC\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE1"" 
Dependent="\\PC\root\cimv2:Win32_DiskPartition.DeviceID="Disk #1, Partition #1"" 

Antecedent="\\PC\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE0"" 
Dependent="\\PC\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"" 

==> 

因此,使用"Where AssocClass = Win32_DiskDriveToDiskPartition"子句,可以查詢ASSOCIATORS OF

string query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + dd_ID 
        + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; 

string query = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + pp_ID 
        + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; 

這裏,對於上述場景(se Ëwmic輸出):

  • dd_ID可能是要麼
    • "\\.\PHYSICALDRIVE0"
    • "\\.\PHYSICALDRIVE1"(二項集合返回,當然)和
  • pp_ID可能是要麼
    • "Disk #0, Partition #0"
    • "Disk #1, Partition #0"
    • "Disk #1, Partition #1"

我已經在上面的VBScript所有數據組合查詢測試,並希望它應該在c#工作,以及(專門的有可能進來c#逃逸反斜線必要性)。