Get-DiskInventory uses WMI to retrieve the Win32_LogicalDisk instances from one or more computers. It displays each disk's drive letter, free space, used space, total size, and percentage of freespace. You will need to add this function to an existing module or dot-source the function into memory before using. See below example for dot-sourcing the function into memory.

Example:

 

PowerShell
Edit|Remove
PS C:\> . .\Function-Get-DiskInventory.ps1 
PS C:\> Get-DiskInventory 
 
PSComputerName : MYCOMPUTER 
DeviceID       : C: 
VolumeName     : SSD 
FreeSpace(GB)  : 53 
Capacity(GB)   : 233 
UsedSpace(GB)  : 179 
%Free          : 23
 

 

 

 

PowerShell
Edit|Remove
<# 
.SYNOPSIS 
Get-DiskInventory retrieves logical disk information from one or 
more computers. 
.DESCRIPTION 
Get-DiskInventory uses WMI to retrieve the Win32_LogicalDisk 
instances from one or more computers. It displays each disk's 
drive letter, free space, used space, total size, and percentage of free 
space. 
.NOTES 
Created by: Jason Wasser @wasserja 
Modified: 1/10/2017 11:05:17 AM  
.PARAMETER ComputerName 
The computer name, or names, to query. Default: Localhost. 
.PARAMETER drivetype 
The drive type to query. See Win32_LogicalDisk documentation 
for values. 3 is a fixed disk, and is the default. 
.EXAMPLE 
Get-DiskInventory 
Get the logical disk inventory from the local computer. 
.EXAMPLE 
Get-DiskInventory -ComputerName SERVER-R2 
Get the logical disk inventory from the remote server SERVER-R2. 
.LINK 
https://gallery.technet.microsoft.com/scriptcenter/Get-DiskInventory-2d09f3f7 
#> 
function Get-DiskInventory 
{ 
    [CmdletBinding()] 
    [Alias()] 
    Param 
    ( 
        # ComputerName 
        [Parameter(Mandatory=$false, 
                   ValueFromPipelineByPropertyName=$true, 
                   Position=0)] 
        [string[]]$ComputerName=$env:COMPUTERNAME, 
 
        # DriveType 3 is fixed disk (excludes USB Drives and CD ROM) 
        [int]$DriveType=3 
    ) 
 
    Begin 
    { 
    } 
    Process 
    { 
         
        foreach ($Computer in $ComputerName) { 
            Get-WmiObject -class Win32_LogicalDisk -computername $Computer ` 
            -filter "drivetype=$DriveType" | 
            Sort-Object -property DeviceID | 
            Select-Object -Property PSComputerName,DeviceID,VolumeName, 
            @{l='FreeSpace(GB)';e={$_.FreeSpace / 1GB -as [int]}}, 
            @{l='Capacity(GB)';e={$_.Size / 1GB -as [int]}}, 
            @{l='UsedSpace(GB)';e={($_.Size - $_.FreeSpace) / 1GB -as [int]}}, 
            @{l='%Free';e={$_.FreeSpace / $_.Size * 100 -as [int]}} 
            } 
 
    } 
    End 
    { 
    } 
}