# 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