kjacobsen icon

VOLUME HEALTH CHECKS IN POWERSHELL

kjacobsen | PRO | 04/02/12 09:48:24 AM UTC | 0 ⭐ | 1680 👁️ | Never ⏰ | []
PowerShell |

2.31 KB

|

None

|

0 👍

/

0 👎

# 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

Comments