Here is an example function to return free space remaining on a volume with associated details. Updated 27/04/2012 to fix mount points.

  
Usage Examples:
Get-VolumeFreeSpace|ft
Get-VolumeFreeSpace|Select ComputerName,Name,MountPoint,FreeSpaceGiB|ft
Get-VolumeFreeSpace|Where-Object {!$_.SystemVolume}|Select ComputerName,Name,MountPoint,FreeSpaceGiB|ft
Get-VolumeFreeSpace "ComputerA","ComputerB" |ft

 

 

PowerShell
Edit|Remove
#http://jongurgul.com/blog/get-volumefreespace/ 
Function Get-VolumeFreeSpace{ 
    Param([String[]]$Computers)  
    If (!$Computers) {$Computers = $ENV:ComputerName}  
    $Base = New-Object PSObject;  
    $Base | Add-Member Noteproperty ComputerName -Value $Null;  
    $Base | Add-Member Noteproperty DeviceID -Value $Null;  
    $Base | Add-Member Noteproperty SystemVolume -Value $Null;  
    $Base | Add-Member Noteproperty DriveType -Value $Null;  
    $Base | Add-Member Noteproperty Name -Value $Null;  
    $Base | Add-Member Noteproperty MountPoint -Value $Null;  
    $Base | Add-Member Noteproperty FreeSpaceGiB -Value $Null;  
    $Results =  New-Object System.Collections.Generic.List[System.Object];  
  
    ForEach ($Computer in $Computers){  
        $Volume = Get-WmiObject -Class "Win32_Volume" -ComputerName $Computer;  
        $MountPoint = Get-WmiObject -Class "Win32_MountPoint" -ComputerName $Computer | Select @{Name="DeviceID";Expression={$_.Volume.ToString().Substring($_.Volume.ToString().IndexOf("`"")).Replace("`"","").Replace("\\","\")}},@{Name="MountPoint";Expression={$_.Directory.ToString().Substring($_.Volume.ToString().IndexOf("`"")).Replace("`"","").Replace("\\","\")}};    
        [String[]]$Mounts = $MountPoint|%{$_.DeviceID}  
        $Volume |%{  
        $Entry = $Base | Select-Object *  
        $Entry.ComputerName = $Computer;  
        $Entry.DeviceID =  $_.DeviceID;  
        $Entry.SystemVolume =  $_.SystemVolume;  
        $Entry.DriveType = $_.DriveType;  
        $Entry.Name = $_.Name;  
        $Entry.FreeSpaceGiB = [Math]::Round($_.FreeSpace/1GB,3);  
        $DeviceID = $_.DeviceID;          
        $MountPoint| Where-Object{$DeviceID -contains $_.DeviceID}|%{ 
        $Local = $Entry | Select-Object * 
        $Local.MountPoint = $_.MountPoint; 
        [Void]$Results.Add($Local); 
        };  
        $_|Where-Object{$Mounts -notcontains $_.DeviceID}|%{[Void]$Results.Add($Entry);};  
        }  
    }      
    $Results  
}