I have multiple volumes (as nearly everybody nowadays): on Windows they end up specified as C:, D: and so on. How do I list these all like on a Unix machine with "ls /mnt/" with Powershell?
-
1get-psdrive will return this Name Provider Root CurrentLocation ---- -------- ---- --------------- A FileSystem A:Alias Alias C FileSystem C:\ scripts – streetparade Nov 02 '09 at 21:02
13 Answers
To get all of the file system drives, you can use the following command:
gdr -PSProvider 'FileSystem'
gdr
is an alias for Get-PSDrive
, which includes all of the "virtual drives" for the registry, etc.

- 152,002
- 23
- 148
- 175
-
This also include the CD ROM which I am not sure is desired in all use cases keep that in mind guys. – Atif Ali Mar 29 '19 at 00:53
-
-
Get-Volume
You will get: DriveLetter, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining and Size.

- 4,532
- 4
- 53
- 64

- 557
- 4
- 3
-
Get-Volume appears to be available only on Windows-Server 2012 and Windows-Server 2016. – Bram Nov 28 '16 at 09:46
-
2Get-Volume worked for me running powershell 5.1. Perhaps they made this standard in recent years/recent updates. This answer should get more attention. – Josh Desmond Jun 17 '17 at 03:59
-
This is now the right answer. The answers using Get-PDDrive are for older versions of powershell – Michael Shaw Dec 13 '19 at 05:24
-
If you want details, there is Get-Drive and Get-Partition, that can be piped for everything. Get-Drive | Get-Partition – Nathan Hartley Dec 16 '21 at 03:42
-
-
Also worked for me in Windows 11. This is definitely the way to go. – nevarDeath Aug 27 '23 at 14:45
On Windows Powershell:
Get-PSDrive
[System.IO.DriveInfo]::getdrives()
wmic diskdrive
wmic volume
Also the utility dskwipe: http://smithii.com/dskwipe
dskwipe.exe -l

- 398,270
- 210
- 566
- 880
-
To tag on, you can also include a flag from another answer `-PSProvider:'FileSystem'` to display only file systems. – FilBot3 Apr 25 '16 at 17:37
Firstly, on Unix you use mount
, not ls /mnt
: many things are not mounted in /mnt
.
Anyhow, there's the mountvol
DOS command, which continues to work in Powershell, and there's the Powershell-specific Get-PSDrive
.

- 198,619
- 38
- 280
- 391
Though this isn't 'powershell' specific... you can easily list the drives and partitions using diskpart, list volume
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

- 5,061
- 1
- 41
- 41
This is pretty old, but I found following worth noting:
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
Without filtering properties, on my test system, 4319.4196ms to 1777.7237ms. Unless I need a PS-Drive object returned, I'll stick with WMI.
EDIT: I think we have a winner: PS N:> (measure-command {[System.IO.DriveInfo]::getdrives()|%{$_.name}|out-host}).totalmilliseconds 110.9819

- 931
- 2
- 14
- 19
To list drives:
fsutil fsinfo drives
Is also supported by CMD and requires no elevation nor extra 3rd-parties.

- 4,217
- 3
- 39
- 54
We have multiple volumes per drive (some are mounted on subdirectories on the drive). This code shows a list of the mount points and volume labels. Obviously you can also extract free space and so on:
gwmi win32_volume|where-object {$_.filesystem -match "ntfs"}|sort {$_.name} |foreach-object {
echo "$(echo $_.name) [$(echo $_.label)]"
}

- 1
You can use the following to find the "total" disk size on a drive as well.
Get-CimInstance -ComputerName yourhostname win32_logicaldisk | foreach-object {write " $($.caption) $('{0:N2}' -f ($.Size/1gb)) GB total, $('{0:N2}' -f ($_.FreeSpace/1gb)) GB free "}

- 1
-
2this seems like a VERY minor variation of one of the previous Answers. what is the benefit to yours that is not in the other? – Lee_Dailey May 26 '21 at 00:02
Microsoft have a way of doing this as part of their az vm repair
scripts (see: Repair a Windows VM by using the Azure Virtual Machine repair commands).
It is available under MIT license at: https://github.com/Azure/repair-script-library/blob/51e60cf70bba38316394089cee8e24a9b1f22e5f/src/windows/common/helpers/Get-Disk-Partitions.ps1

- 1,797
- 1
- 20
- 38
If the device is present, but not (yet) mounted, this helps:
Get-PnpDevice -PresentOnly -InstanceId SCSI*