如何在Powershell 2.0中获取驱动器字母列表

7

我正在尝试在下拉菜单中获取驱动器字母列表。我目前使用的代码在Windows 10中运行良好,但在Windows 7中根本不起作用。

     $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) }

现在在Win 7和10中,每个驱动器都显示"@DeviceID=C:}"、"@DeviceID=D:}"等。我需要只显示"C:"、"D:"等。

谢谢!


2
Select-Object DeviceID -> Select-Object -Expand DeviceID - Mathias R. Jessen
谢谢Mathias!我忘记了-Expand。在7和10中似乎可以工作。 - sloppyfrenzy
4个回答

10
Get-PSDrive

这将返回当前会话中映射的所有驱动器。 Name 属性包含驱动器字母。

要仅获取驱动器字母:

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

已在PSv2中测试通过:

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

1
-replace 'on your device','in the current session' - Mathias R. Jessen
@MathiasR.Jessen 真的。它涵盖了大多数使用情况,不过我更新了我的答案。 - Maximilian Burszley
值得注意的是,Get-PSDrive 包括_PS-specific_驱动器,这些驱动器外部程序看不到。 - mklement0
1
谢谢,不过 Get-PSDrive 似乎返回的不仅仅是驱动器字母。我看到每个驱动器字母都有一个“FileSystem”的提供程序值,但在Win 7中我似乎无法将其缩小到仅驱动器字母。 - sloppyfrenzy
1
@tarekahf,您正在寻找 $Env:SystemDrive,它反映了 Windows 安装的驱动器。 - Maximilian Burszley
显示剩余3条评论

2
$drives = (Get-PSDrive -PSProvider FileSystem).Root

返回具有根路径的驱动器数组:

C:\
D:\
E:\

如果您不想要结尾,可以轻松地对其进行修剪。


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

1
仅提供代码的答案通常无法指出问题发生的原因。请考虑包含解释您的代码如何解决问题。请阅读如何撰写好的答案 - FluffyKitten

-1

看起来每个项目$drives都是一个HashTable,其中包含一个键值对DeviceID = driveletter。快速测试表明,使用$Drives.DeviceID仅返回键值对的值。

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

谢谢,这是带还是不带 Select-Object DeviceID 的?无论哪种方式似乎都无法使其工作。它说这是一个空值表达式。 - sloppyfrenzy
我使用了 Select-Object 完成了它。 - Bpendragon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接