2014-11-23 40 views
0

在PowerShell中,我想將drivetype(這裏是類型2)的驅動器(deviceid)寫入數組(變量$letters)。該driveletters應該被排序是這樣的:
$信= @(「A」,「B」)等將磁盤類型的deviceids寫入數組

下面我發現罰款win32_diskdrive的作品,但我不能添加DRIVETYPE線。

$letters = Get-WmiObject win32_diskdrive | 
    Where {$_.interfacetype -Like "USB"} | 
    ForEach {Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"} | 
    ForEach {Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"} | 
    ForEach {$_.deviceid} 

下面的下一行包含Win32_LogicalDisk代替win32_diskdrive,但我沒能得到一個乾淨的陣列輸出像$letters = @("a:", "b:")

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Select ($_.deviceid) 

\\WIN7\root\cimv2:Win32_LogicalDisk.DeviceID="H:" 

我怎麼能結合drivetypewin32_diskdrive或我怎麼能得到只有「H:」Win32_LogicalDisk

回答

0

您不應該在您的Select-Object中使用$_。你只要把你想要返回的屬性。在你的情況下:DeviceID。如果你只是想要USB設備中的字符串,你很靠近。

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Where-Object {$_.Size -gt 0} | Select -ExpandProperty deviceid 

-ExpandProperty deviceid將只與評論DeviceID

更新的財產和其他答案返回字符串數組,而不是一個對象的

我們可以很容易地做一個小更新,以確保您得到具有可測量尺寸的驅動器。我們將納入這一點,同時處理您的其他答案多-replace這是不需要的,如果你移動where子句並注意我以前試圖告訴你的-ExpandProperty deviceid

+0

謝謝,它與你的提示很好地結合在一起 $ letters = Get-WMIObject Win32_LogicalDisk -filter DriveType = 2 |選擇 - 屬性設備ID 現在我發現它顯示也彈出,但仍然插入驅動器。如何只顯示具有(分區)大小的設備? – scriptinghomer 2014-11-23 19:27:15

+0

好的,通過myselfe找到答案:Get-WMIObject Win32_LogicalDisk -filter DriveType = 2 |選擇-Property deviceid,size |其中{$ _。size} – scriptinghomer 2014-11-23 19:34:13

+0

@scriptinghomer查看我的更新。 – Matt 2014-11-24 15:03:05

0

這是我的解決方案。工作正常。

$letters = Get-WMIObject Win32_LogicalDisk -filter DriveType=2 | Select -Property deviceid, size | where {$_.size -gt 0} 
$letters = $letters -replace '@{deviceid=' 
$letters = $letters -replace "size=" 
$letters = $letters -replace "}" 
$letters = $letters -replace "" 
$letters = $letters -replace '@{size=' 
$letters = $letters -replace '}' 
$letters = $letters -replace '@{size=' 
$letters = $letters -replace ';' 
$letters = $letters -replace '0' 
$letters = $letters -replace '1' 
$letters = $letters -replace '2' 
$letters = $letters -replace '3' 
$letters = $letters -replace '4' 
$letters = $letters -replace '5' 
$letters = $letters -replace '6' 
$letters = $letters -replace '7' 
$letters = $letters -replace '8' 
$letters = $letters -replace '9' 
$letters = $letters -replace ':' 
$letters = $letters -replace ' ' 

也許這是一種更簡單的方法來取代所有這些東西。但它適用於我:-)