81

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?

wishi
  • 7,188
  • 17
  • 64
  • 103
  • 1
    get-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 Answers13

106

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.

bdukes
  • 152,002
  • 23
  • 148
  • 175
44
Get-Volume

You will get: DriveLetter, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining and Size.

Yousha Aleayoub
  • 4,532
  • 4
  • 53
  • 64
14

On Windows Powershell:

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

Also the utility dskwipe: http://smithii.com/dskwipe

dskwipe.exe -l
Bill the Lizard
  • 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
5

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.

ephemient
  • 198,619
  • 38
  • 280
  • 391
4

Run command:

Get-PsDrive -PsProvider FileSystem

For more info see:

Mwiza
  • 7,780
  • 3
  • 46
  • 42
3

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
Edward J Beckett
  • 5,061
  • 1
  • 41
  • 41
2

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}).to‌​talmilliseconds 110.9819

Yevgeniy
  • 931
  • 2
  • 14
  • 19
1

To list drives:

fsutil fsinfo drives

Is also supported by CMD and requires no elevation nor extra 3rd-parties.

Sergei Krivonos
  • 4,217
  • 3
  • 39
  • 54
0

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)]"
}
0

You can also do it on the CLI with

net use
M46
  • 923
  • 9
  • 20
0

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 "}

gsb005
  • 1
  • 2
    this 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
0

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

Iain
  • 1,797
  • 1
  • 20
  • 38
0

If the device is present, but not (yet) mounted, this helps:

Get-PnpDevice -PresentOnly -InstanceId SCSI*