PowerShell for Free Space?
I needed a script that could be executed to report free space. I’ll review how to do it locally and how to wrap it around an array of computer names so it can be ran from anywhere with RPC access to the target machines.
For Starters
Here’s the script that gets my my report from a local computer:
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object Name, FileSystem,FreeSpace,BlockSize,Size | ForEach-Object { $_.BlockSize=(($_.FreeSpace)/($_.Size))*100;$_.FreeSpace=($_.FreeSpace/1GB);$_.Size=($_.Size/1GB);$_ } | Format-Table @{n='Server';e={$env:COMPUTERNAME}}, @{n='Disk';e={$_.Name}}, @{n='FS';e={$_.FileSystem}},@{n='Capacity (GB)';e={'{0:N3}' -f $_.Size}},@{n='GB Free';e={'{0:N2}'-f $_.FreeSpace}}, @{n='% Free';e={'{0:N2}'-f $_.BlockSize}} -AutoSize
Do it Remote:
Keep in mind the entire script can be wrapped around a “foreach” statement and pass in the ComputerName parameter for remote execution.
$ComputerNames = @("Server1", "Server2", "Server3") foreach ($ComputerName in $ComputerNames) { Get-WmiObject -ComputerName $ComputerName -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object Name, FileSystem,FreeSpace,BlockSize,Size | ForEach-Object { $_.BlockSize=(($_.FreeSpace)/($_.Size))*100;$_.FreeSpace=($_.FreeSpace/1GB);$_.Size=($_.Size/1GB);$_ } | Format-Table @{n='Server';e={$ComputerName}}, @{n='Disk';e={$_.Name}}, @{n='FS';e={$_.FileSystem}},@{n='Capacity (GB)';e={'{0:N3}' -f $_.Size}},@{n='GB Free';e={'{0:N2}'-f $_.FreeSpace}}, @{n='% Free';e={'{0:N2}'-f $_.BlockSize}} -AutoSize }
Report What You Found:
Afterward, sprinkle in the export type you’d like (file, CSV, etc.) to deliver.
$ComputerNames = @("Server1", "Server2", "Server3") $DiskSpaceReport = foreach ($ComputerName in $ComputerNames) { Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object Name, FileSystem,FreeSpace,BlockSize,Size | ForEach-Object { $_.BlockSize=(($_.FreeSpace)/($_.Size))*100;$_.FreeSpace=($_.FreeSpace/1GB);$_.Size=($_.Size/1GB);$_ } | Format-Table @{n='Server';e={$ComputerName}}, @{n='Disk';e={$_.Name}}, @{n='FS';e={$_.FileSystem}},@{n='Capacity (GB)';e={'{0:N3}' -f $_.Size}},@{n='GB Free';e={'{0:N2}'-f $_.FreeSpace}}, @{n='% Free';e={'{0:N2}'-f $_.BlockSize}} -AutoSize } $DiskSpaceReport | Export-Csv $DiskSpaceReport | Out-File $DiskSpaceReport | Out-GridView
To VARCHAR or NVARCHAR? (and how it bit me using HASHBYTES) Asymmetric Encryption of Text using x.509 Certificates in PowerShell
Hi mate this is great… but what about if you need it to report back on Mount Points also?
Hello Jeff,
For whatever reason, BlockSize comes back empty. Do you know why this might be happening?
It works as expected when used with win32_volume namespace.
Sounds like a formating problem, but I can’t reproduce. I’d start there and see if you need to tweak it. If you do, let me know!