# encoding: ascii
# api: powershell
# title: unix df -h analog
# description: Prints “human-readable” information for specified drive
# version: 0.1
# type: function
# author: greg zakharov
# license: CC0
# function: Get-DriveFormatData
# x-poshcode-id: 4581
# x-archived: 2013-11-06T02:14:39
# x-published: 2013-11-05T08:12:00
#
#
function Get-DriveFormatData {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$true,
               ValueFromPipeline=$true)]
    [ValidatePattern("[a-z]")]
    [Char]$DriveLetter
  )
  
  begin {
    function vol([Char]$dl) {
      try {
        $rk = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\MountedDevices')
        $rk.GetValueNames() | % {$hash = @{}}{
          $hash[$_] = [String]$rk.GetValue($_) -replace ' ', ''
        }{
          ($hash.GetEnumerator() | ? {$_.Value -eq $hash[('\DosDevices\' + $dl + ':')]}) | % {
            if ($_.Name -notmatch 'Dos') {$_.Name}
          }
        }
      }
      finally {
        if ($rk -ne $null) {$rk.Close()}
      }
    }
  }
  process {
    [IO.DriveInfo]::GetDrives() | % {$arr = @()}{
      $str = "" | select Drive, FileSystem, Size, Used, Avail, Use, Mounted, Label
      if ($_.Name -eq ($DriveLetter + ':\') -and $_.IsReady) {
        $str.Drive = $_.Name
        $str.FileSystem = $_.DriveFormat
        $str.Size = ("{0}Gb" -f [Math]::Round($_.TotalSize / 1Gb))
        $str.Used = ("{0:F2}Gb" -f (($_.TotalSize - $_.TotalFreeSpace) / 1Gb))
        $str.Avail = ("{0:F2}Gb" -f ($_.TotalFreeSpace / 1Gb))
        $str.Use = ("{0:F2}%" -f (($_.TotalSize - $_.TotalFreeSpace) * 100 / $_.TotalSize))
        $str.Mounted = (vol $_.Name[0])
        $str.Label = $_.VolumeLabel
        $arr += $str
      }
    }
  }
  end {
    $arr | ft -a
  }
}
