Getting Drive Information Using WMI and PowerShell
June 15th, 2013 by Charlie Russel and tagged Format-Table, Formatting output, PowerShell, WMI
In my ongoing quest to remove dependency on legacy DOS commands, I recently created this script to get a list of all the local and mapped drives on a machine and how much free space each has on it. This script could be easily extended to display additional information (such as the underlying filesystem type) by simply adding to the output tables. All the information is already captured in the Get-WMIObject call at the beginning, but the fun is in the formatting (and math) of the tables to provide useful information at a glance.
# Filename: GetDrives.ps1 # # A script to get a list and information on the "local" drives without using "Net" # # ModHist: 08/05/2013 - Initial # : # # *********************************************************************** $LogicalDisks = Get-WMIObject Win32_LogicalDisk $LocalHDisks = $LogicalDisks | Where-Object { $_.DriveType -eq 3 } $RemoteDrives = Get-WMIObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 4 } $OpticalDrives = Get-WMIObject Win32_CDRomDrive$LocalHDisks | ft -auto @{Label="Drive";` Expression={$_.DeviceID}; width=5 align="Right"},` @{Label="Volume Label";` Expression={$_.VolumeName}; Width=25},` @{Label="%Free";` Expression={[int]($_.FreeSpace/$_.Size * 100)};` Width=8},` @{Label="GBFree";` Expression={$([math]::round(($_.FreeSpace/1gb),0))};` Width=8},` @{Label="Size(GB)";` Expression={$([math]::round(($_.Size/1gb),0))};` Width=8} $OpticalDrives | Sort Drive | ft -auto ` @{Label="Drive";` Expression={$_.Drive};` Width=5 Align="Right"}, @{Label="Capabilities";` Expression={ if ($_.Capabilities -eq 4) { ` "Read/Write" ` } else { ` "Read-Only"}}},` @{Label="Disk Volume Label";` Expression={$_.VolumeName}} $RemoteDrives | ft -auto @{Label="Drive";` Expression={$_.DeviceID};` width=5 align="Right"},` @{Label="Remote Share";` Expression={$_.ProviderName};` Width=25}, @{Label="%Free";` Expression={[int]($_.FreeSpace/$_.Size * 100)};` Width=8},` @{Label="GBFree";` Expression={$([math]::round(($_.FreeSpace/1gb),0))};` Width=8},` @{Label="Size(GB)";` Expression={$([math]::round(($_.Size/1gb),0))};` Width=8}
If you find this script interesting or useful, great. And if you have improvements to it, I’d be delighted to hear about them.
Charlie.
Posted in PowerShell, WMI | 1 Comment »
July 11th, 2014 at 8:54 am
The script is great. I am beginner and i need this script to show result in CSV file. Please let me where to change. Waiting to hear from you.
Regards
M Saqib