Advertisement
kjacobsen

VOLUME HEALTH CHECKS IN POWERSHELL

Apr 2nd, 2012
1,432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Code Snippet from aperturescience.su
  2. # Parameters
  3.  
  4. # Body
  5. Write-Verbose "Starting volume checks..."
  6. $volumes = Get-WmiObject win32_volume -filter "drivetype=3"
  7. foreach ($volume in $volumes)
  8. {
  9.     $driveletter = $volume.name
  10.     Write-Verbose "Checking $driveletter"
  11.     if (!($thresholdexcludesystem -and ($volume.systemvolume)))
  12.     {
  13.         # Disk space checks
  14.         $freespace = $volume.freespace /1Gb
  15.         $result =  $freespace -lt $threshold
  16.         if ($result)
  17.         {
  18.             send-email "WARNING: volume $driveletter has only $freespace left, this is less than threshold $threshold" $false
  19.         }
  20.         else
  21.         {
  22.             send-email "volume $driveletter has more than enough disk space, $freespace with threshold $threshold" $true
  23.         }
  24.     }
  25.     else
  26.     {
  27.         Write-Verbose "Skipping $driveletter as it is a system drive and I am excluding it from threshold checking"
  28.     }
  29.  
  30.     # Dirty Flag Checks/checkdisk
  31.     # 1. http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/ac0a7de1-fc43-4a01-8ffb-371ef9845bbc
  32.     # 2. http://gallery.technet.microsoft.com/scriptcenter/57076851-97fb-4af6-8c5c-1e34156ceab4 using chkntfs
  33.  
  34.     #1
  35.     Write-Verbose "WMI Check"
  36.     $wmidirtybitset = $volume.dirtybitset
  37.     if ($wmidirtybitset)
  38.     {
  39.         send-email "WARNING: volume $driveletter is marked as dirty in WMI" $false
  40.     }
  41.     else
  42.     {
  43.         send-email "$driveletter is not marked as dirty in WMI" $true
  44.     }
  45.  
  46.     #2 This doesnt work for volumes without a drive letter
  47.     if ($volume.driveletter -ne $null)
  48.     {
  49.         Write-Verbose "chkntfs Check"
  50.         $chkntfsresult = ""
  51.         try
  52.         {
  53.             $tempchkntfsresult = chkntfs $volume.driveletter
  54.             $chkntfsresult = [string]$tempchkntfsresult
  55.         }
  56.         catch
  57.         {
  58.             send-email "error running chkntfs.exe" $false
  59.         }
  60.  
  61.         $chkntfsdirtybitset= (($chkntfsresult.contains("run on next reboot")) -or ($chkntfsresult.contains("is dirty")))
  62.  
  63.         if ($chkntfsdirtybitset)
  64.         {
  65.             send-email "WARNING: volume $driveletter is marked as dirty in chkntfs" $false
  66.         }
  67.         else
  68.         {
  69.             send-email "$driveletter is not marked as dirty in chkntfs" $true
  70.         }
  71.     }
  72.  
  73.     # Defrag recommended
  74.     $mustdefrag = $volume.DefragAnalysis().DefragRecommended
  75.     if ($mustdefrag)
  76.     {
  77.         send-email "WARNING: volume $driveletter should be defragmented" $false
  78.     }
  79.     else
  80.     {
  81.         send-email "$driveletter doesn't need to be defragmented" $true
  82.     }
  83. }
  84.  
  85. # Code Snippet from aperturescience.su
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement