Purpose: This script will search a list of computers and report their c drives total and free space into a text file that can be imported into excel.
This is my first time using jobs to speed up the process of gathering the info so there could be a better way of doing this but this seems to work just fine.
cls #Get free disk space code from here. #http://www.codeproject.com/Articles/757946/Retrieve-Disk-Space-of-Remote-Computers-using-Powe $Global:Servers = Get-Content "C:\temp\computers.txt" $Global:ReportPath = "C:\temp\freediskspace.txt" $scriptblock = { param($server) $ConvertToGB = (1024 * 1024 * 1024) $pingResult = Test-Connection -count 1 -ErrorAction SilentlyContinue $server | select IPV4Address $disk = Get-WmiObject Win32_LogicalDisk -ComputerName $Server -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace $values = @() if($Error){ if( $Error -like "*Access is denied*"){ return ($server+",,AccessDenied") } $Error.Clear() return ($server+",,") } $values += ($Server + "," + ($disk.Size / $ConvertToGB) + "," + ($disk.FreeSpace / $ConvertToGB) ) return $values } function getdata{ $jobs = Get-Job | ? { $_.State -eq "Completed" } foreach( $job in $jobs){ $results = Receive-Job $job Add-Content $ReportPath $results Remove-Job $job } } Add-Content $ReportPath "Server,Total,Free" foreach($server in $Servers){ while( (Get-Job).count -ge 50 ){ sleep -Seconds 1 getdata } Start-Job -ScriptBlock $scriptblock -ArgumentList $server } while( (get-job).count -ne 0 ){ sleep -Seconds 1 getdata }