2017-08-30 59 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

相关问题