2017-08-30 50 views
3

我試圖從下拉菜單中獲取驅動器號的列表。我目前使用下面的代碼,它工作在Windows 10就好了,但無法在Windows在所有的工作7.如何獲取驅動器號在Powershell 2.0中的列表

 $Drive_Letters = Get-WmiObject Win32_LogicalDisk 
    ForEach ($Drives in $Drive_Letters.DeviceID) { $Dest_Drive_Box.Items.Add($Drives) } 

在Win 7我試圖調整代碼這個...

 $Drive_Letters = Get-WmiObject Win32_LogicalDisk | Select-Object DeviceID 
    ForEach ($Drives in $Drive_Letters) { $Dest_Drive_Box.Items.Add($Drives) } 

但是現在它顯示「@ DeviceID = C:}」,「@ DeviceID = D:}」等等在Win 7和10中,用於每個驅動器號。我只需要顯示「C:」,「D:」等。

謝謝!

+2

'選擇-對象DeviceID' - >'選擇-對象-Expand DeviceID' –

+0

謝謝馬蒂亞斯!我忘記了「展開」。似乎在7和10中工作。 – sloppyfrenzy

回答

2
Get-PSDrive 

這將返回映射到當前會話中的所有驅動器。 Name屬性包含驅動器號。

爲了捕捉只是盤符:

(Get-PSDrive).Name -match '^[a-z]$' 

測試中PSV2工作:

Get-PSDrive | Select-Object -ExpandProperty 'Name' | Select-String -Pattern '^[a-z]$' 
+1

'在設備上'替換''在當前會話中' –

+0

@ MathiasR.Jessen True。但是,它捕獲了大多數用例。我更新了我的答案 – TheIncorrigible1

+0

另外值得注意的是'Get-PSDrive'包含_PS-specific_驅動器,外部程序不會看到。 – mklement0

0

這樣看來,每個項目$drives是一個鍵值對DeviceID = driveletter快速測試顯示哈希表使用$Drives.DeviceID僅返回鍵值對的值。

ForEach ($Drives in $Drive_Letters) { $Dest_Drive_Box.Items.Add($Drives.DeviceID) } 
+0

謝謝,這是帶有還是不帶'Select-Object DeviceID'?似乎無法讓它以任何方式工作。說這是一個空值表達式。 – sloppyfrenzy

+0

我是用'Select-Object'做到的 – Bpendragon

0
$Drives = Get-WmiObject Win32_Logicaldisk | % {$_.DeviceId} 
$Drives | % {$Dest_Drive_Box.Items.Add($_)} 
+1

僅有代碼的答案往往無助於指出問題發生的原因。請考慮包括解釋爲什麼你的代碼解決了這個問題。請閱讀[我如何寫出一個好的答案](https://stackoverflow.com/help/how-to-answer) – FluffyKitten

相關問題