Functions/Get-DriveStat.ps1
function Get-DriveStat { <# .SYNOPSIS To get statistics on drives on a particular server or servers. .DESCRIPTION To get statistics on drives on a server including Size, FreeSpace, and FreePct. Command line parameter allows for capacity statistics in Bytes, KB, MB, and GB .EXAMPLE Get-DriveStat ComputerName DeviceID VolumeName SizeGB FreeSpaceGB FreePct ------------ -------- ---------- ------ ----------- ------- localhost C: Windows 237.14 19.56 8.25 .EXAMPLE Get-DriveStat -Capacity MB ComputerName DeviceID VolumeName SizeMB FreeSpaceMB FreePct ------------ -------- ---------- ------ ----------- ------- localhost C: Windows 242831.45 20026.65 8.25 .EXAMPLE Get-DriveStat -Verbose VERBOSE: Starting Get-DriveStat VERBOSE: Capacity will be expressed in [GB] VERBOSE: Processing MDA-102192 ComputerName : localhost DeviceID : C: VolumeName : Windows SizeGB : 237.14 FreeSpaceGB : 19.56 FreePct : 8.25 VERBOSE: Ending Get-DriveStat .NOTES Put in error checking around Get-CimInstance to handle Kerberos errors. #> # todo - add Credential #region Parameters [CmdletBinding()] [OutputType('psobject')] Param ( [Parameter(Position = 0)] [ValidateNotNullorEmpty()] [Alias('CN', 'Server', 'ServerName', 'PSComputerName', 'SystemName')] [string[]] $ComputerName = $env:COMPUTERNAME, [Parameter(Position = 1)] [ValidateSet('Bytes', 'KB', 'MB', 'GB')] [string] $Capacity = 'GB' ) #endregion Parameters begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" Write-Verbose -Message "Capacity will be expressed in [$Capacity]" $Query = "Select * from Win32_LogicalDisk where DriveType='3' and FileSystem='NTFS'" $CimOption = New-CimSessionOption -EncodePortInServicePrincipalName } process { foreach ($CurName in $ComputerName) { Write-Verbose -Message "Processing $CurName" try { $DriveStat = Get-CimInstance -Query $Query -ComputerName $CurName } catch { try { $CimSession = New-CimSession -ComputerName $CurName -SessionOption $CimOption $DriveStat = Get-CimInstance -Query $Query -CimSession -CimSession $CimSession.Close() $CimSession.Dispose() } catch { Write-Error -Message "Could not connect to [$CurName]" } } switch ($Capacity) { 'Bytes' { $DriveStat | Select-Object -Property @{name = 'ComputerName'; expression = { $_.SystemName } }, DeviceID, VolumeName, Size, FreeSpace, @{name = 'FreePct'; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / $_.Size * 100)) } } } 'KB' { $DriveStat | Select-Object -Property @{name = 'ComputerName'; expression = { $_.SystemName } }, DeviceID, VolumeName, @{name = 'SizeKB' ; expression = { [double] ('{0:f2}' -f ($_.Size / 1KB)) } }, @{name = 'FreeSpaceKB'; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / 1KB)) } }, @{name = 'FreePct' ; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / $_.Size * 100)) } } } 'MB' { $DriveStat | Select-Object -Property @{name = 'ComputerName'; expression = { $_.SystemName } }, DeviceID, VolumeName, @{name = 'SizeMB' ; expression = { [double] ('{0:f2}' -f ($_.Size / 1MB)) } }, @{name = 'FreeSpaceMB'; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / 1MB)) } }, @{name = 'FreePct' ; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / $_.Size * 100)) } } } 'GB' { $DriveStat | Select-Object -Property @{name = 'ComputerName'; expression = { $_.SystemName } }, DeviceID, VolumeName, @{name = 'SizeGB' ; expression = { [double] ('{0:f2}' -f ($_.Size / 1GB)) } }, @{name = 'FreeSpaceGB'; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / 1GB)) } }, @{name = 'FreePct' ; expression = { [double] ('{0:f2}' -f ($_.FreeSpace / $_.Size * 100)) } } } } } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } |