# Code Snippet from aperturescience.su # Parameters # Body Write-Verbose "Starting volume checks..." $volumes = Get-WmiObject win32_volume -filter "drivetype=3" foreach ($volume in $volumes) { $driveletter = $volume.name Write-Verbose "Checking $driveletter" if (!($thresholdexcludesystem -and ($volume.systemvolume))) { # Disk space checks $freespace = $volume.freespace /1Gb $result = $freespace -lt $threshold if ($result) { send-email "WARNING: volume $driveletter has only $freespace left, this is less than threshold $threshold" $false } else { send-email "volume $driveletter has more than enough disk space, $freespace with threshold $threshold" $true } } else { Write-Verbose "Skipping $driveletter as it is a system drive and I am excluding it from threshold checking" } # Dirty Flag Checks/checkdisk # 1. http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/ac0a7de1-fc43-4a01-8ffb-371ef9845bbc # 2. http://gallery.technet.microsoft.com/scriptcenter/57076851-97fb-4af6-8c5c-1e34156ceab4 using chkntfs #1 Write-Verbose "WMI Check" $wmidirtybitset = $volume.dirtybitset if ($wmidirtybitset) { send-email "WARNING: volume $driveletter is marked as dirty in WMI" $false } else { send-email "$driveletter is not marked as dirty in WMI" $true } #2 This doesnt work for volumes without a drive letter if ($volume.driveletter -ne $null) { Write-Verbose "chkntfs Check" $chkntfsresult = "" try { $tempchkntfsresult = chkntfs $volume.driveletter $chkntfsresult = [string]$tempchkntfsresult } catch { send-email "error running chkntfs.exe" $false } $chkntfsdirtybitset= (($chkntfsresult.contains("run on next reboot")) -or ($chkntfsresult.contains("is dirty"))) if ($chkntfsdirtybitset) { send-email "WARNING: volume $driveletter is marked as dirty in chkntfs" $false } else { send-email "$driveletter is not marked as dirty in chkntfs" $true } } # Defrag recommended $mustdefrag = $volume.DefragAnalysis().DefragRecommended if ($mustdefrag) { send-email "WARNING: volume $driveletter should be defragmented" $false } else { send-email "$driveletter doesn't need to be defragmented" $true } } # Code Snippet from aperturescience.su