列出 Powershell 的所有设备、分区和卷

我有多个卷(现在几乎每个人都有) : 在 Windows 上,它们最终被指定为 C: 、 D: 等等。如何像在 Unix 机器上使用“ ls/mnt/”和 Powershell 一样列出这些内容?

222993 次浏览

要获取所有文件系统驱动器,可以使用以下命令:

gdr -PSProvider 'FileSystem'

gdrGet-PSDrive的别名,它包括注册表的所有“虚拟驱动器”等。

首先,在 Unix 上你使用的是 mount,而不是 ls /mnt: 很多东西都没有安装在 /mnt中。

无论如何,还有继续在 Powershell 运行的 mountvol dOS 命令,以及特定于 Powershell 的 Get-PSDrive

Windows PowerShell:

Get-PSDrive
[System.IO.DriveInfo]::getdrives()
wmic diskdrive
wmic volume

还有实用程序 dskwab: http://smithii.com/dskwipe

dskwipe.exe -l

这是相当古老的,但我发现以下值得注意:

PS N:\> (measure-command {Get-WmiObject -Class Win32_LogicalDisk|select -property deviceid|%{$_.deviceid}|out-host}).totalmilliseconds
...
928.7403
PS N:\> (measure-command {gdr -psprovider 'filesystem'|%{$_.name}|out-host}).totalmilliseconds
...
169.474

没有过滤属性,在我的测试系统,4319.4196毫秒至1777.7237毫秒,除非我需要一个 PS 驱动器对象返回,我将坚持使用 WMI。

编辑: 我想我们找到赢家了: PS N: > (test-command {[ System.IO.DriveInfo ] : : getdrive () |% { $_. name } | out-host }) 110.9819

Get-Volume

你会得到: 磁盘驱动器,文件系统标签,文件系统,磁盘驱动器类型,健康状态,大小保留和大小。

虽然这不是‘ powershell’特有的... ... 但是您可以使用 diskpart 列表卷轻松地列出驱动器和分区

PS C:\Dev> diskpart


Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: Box


DISKPART> list volume


Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
Volume 0     D                       DVD-ROM         0 B  No Media
Volume 1         C = System   NTFS   Partition    100 MB  Healthy    System
Volume 2     G   C = Box      NTFS   Partition    244 GB  Healthy    Boot
Volume 3     H   D = Data     NTFS   Partition    687 GB  Healthy
Volume 4     E   System Rese  NTFS   Partition    100 MB  Healthy

每个驱动器有多个卷(有些卷装在驱动器上的子目录中)。这段代码显示了挂载点和卷标的列表。显然,您还可以提取自由空间等:

gwmi win32_volume|where-object {$_.filesystem -match "ntfs"}|sort {$_.name} |foreach-object {
echo "$(echo $_.name) [$(echo $_.label)]"
}

运行命令:

Get-PsDrive -PsProvider FileSystem

更多信息见:

也可以在 CLI 上使用

net use

您也可以使用以下方法查找驱动器上的“总”磁盘大小。

Get-CimInstance-ComputerName yourhostname win32 _ logicaldisk | foreach-object { write“ $($. caption) $(’{0: N2}’-f ($.Size/1gb)) GB total,$(’{0: N2}’-f ($_. FreeSpace/1gb)) GB free”}