Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Function Get-DiskInfo {
- ###Original Source: https://binarynature.blogspot.com/2010/04/powershell-version-of-df-command.html
- param (
- [Parameter(Position=0,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
- [Alias('hostname')][Alias('cn')]
- [string[]]$ComputerName = $env:COMPUTERNAME,
- [Parameter(Position=1)]
- [Alias('runas')][System.Management.Automation.Credential()]
- $Credential = [pscredential]::Empty,
- [Parameter(Position=2)][switch]$Format
- )
- BEGIN {
- Function Make-Readable {
- Param ([Parameter(Mandatory=$true,HelpMessage='Size to Convert')]$size)
- Switch ($size) {
- {$_ -ge 1PB}{$Readable = "{0:#.#' PB'}" -f ($size / 1PB);Break}
- {$_ -ge 1TB}{$Readable = "{0:#.#' TB'}" -f ($size / 1TB);Break}
- {$_ -ge 1GB}{$Readable = "{0:#.#' GB'}" -f ($size / 1GB);Break}
- {$_ -ge 1MB}{$Readable = "{0:#.#' MB'}" -f ($size / 1MB);Break}
- {$_ -ge 1KB}{$Readable = "{0:#' KB'}" -f ($size / 1KB);Break}
- default {$Readable = '{0}' -f ($size) + 'B'}
- }
- Return $Readable
- }
- $wmiq = 'SELECT * FROM Win32_LogicalDisk WHERE Size != Null AND DriveType >= 2'
- }
- PROCESS {
- ForEach ($computer in $ComputerName) {
- Try {
- If ($computer -eq $env:COMPUTERNAME) {
- $disks = Get-WmiObject -Query $wmiq -ComputerName $computer -ErrorAction Stop
- } Else {
- $disks = Get-WmiObject -Query $wmiq -ComputerName $computer -Credential $Credential -ErrorAction Stop
- }
- If ($Format) {
- # Create array for $disk objects and then populate
- $diskarray = @()
- $disks | ForEach-Object { $diskarray += $_ }
- $diskarray | Select-Object -Property @{n='Name';e={$_.SystemName}},
- @{n='Vol';e={$_.DeviceID}},
- VolumeName,
- @{n='Size';e={Make-Readable -size $_.Size}},
- @{n='Used';e={Make-Readable -size (($_.Size)-($_.FreeSpace))}},
- @{n='Avail';e={Make-Readable -size $_.FreeSpace}},
- @{n='Used %';e={"$([int](((($_.Size)-($_.FreeSpace))/($_.Size) * 100))) %"}},
- @{n='Avail %';e={"$(100 - [int](((($_.Size)-($_.FreeSpace))/($_.Size) * 100))) %"}},
- @{n='FS';e={$_.FileSystem}},
- @{n='Type';e={$_.Description}},
- @{n='Date';e={Get-Date}}
- } Else {
- Foreach ($disk in $disks) {
- $dPercentUsed = "$([int](((($disk.Size)-($disk.FreeSpace))/($disk.Size) * 100)))%"
- $diskprops = [ordered]@{
- 'Computer' = $disk.SystemName
- 'Volume' = $disk.DeviceID
- 'VolumeName' = $disk.VolumeName
- 'Size' = $disk.Size
- 'Used' = ($disk.Size - $disk.FreeSpace)
- 'Available' = $disk.FreeSpace
- 'Used %' = $dPercentUsed
- 'Avail %' = "$([int](100 - $dPercentUsed.split('%')[0]))%"
- 'FileSystem' = $disk.FileSystem
- 'Type' = $disk.Description
- 'Date' = Get-Date
- }
- # Create custom PS object and apply type
- $diskobj = New-Object -TypeName PSObject -Property $diskprops
- $diskobj.PSObject.TypeNames.Insert(0,'BinaryNature.DiskFree')
- Write-Output -InputObject $diskobj
- }
- }
- } Catch {
- # Check for common DCOM errors and display "friendly" output
- Switch ($_) {
- {$_.Exception.ErrorCode -eq 0x800706ba}{$err='Unavailable (Host Offline or Firewall)';Break}
- {$_.CategoryInfo.Reason -eq 'UnauthorizedAccessException'}{$err='Access denied (Check User Permissions)';Break}
- default {$err=$_.Exception.Message}
- }
- Write-Warning -Message "$computer - $err"
- }
- }
- }
- END {}
- }
- Get-DiskInfo -Format | Export-Csv -Path $HOME\Documents\windows_servers_storage_stats.csv -NoTypeInformation
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement