#Provide the fragmentation Percentage
Run script as Custom Monitoring Script.
fragmentation_percentage = 30 #Enter the Fragmentation Percentage
import ctypes
from subprocess import PIPE, Popen
import os
import sys
import re
def alert(arg):
sys.stderr.write("%d%d%d" % (arg, arg, arg))
def ecmd(command):
class disable_file_system_redirection:
_disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
_revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
def __enter__(self):
self.old_value = ctypes.c_long()
self.success = self._disable(ctypes.byref(self.old_value))
def __exit__(self, type, value, traceback):
if self.success:
self._revert(self.old_value)
with disable_file_system_redirection():
obj = Popen(command, shell = True, stdout = PIPE, stderr = PIPE)
out, err = obj.communicate()
ret=obj.returncode
return out.strip()
disk_size = ecmd('fsutil fsinfo ntfsinfo C:')
cluster = disk_size.split('\r')
cluster_size = 0
for i in cluster:
if 'Bytes Per Cluster' in i:
a = i.split(':')
cluster_size = a[1].replace(" ", "")
cluster_size = int(cluster_size) / 1024
ps_content=r'''
Get-PhysicalDisk | ForEach-Object {
$physicalDisk = $_
$physicalDisk |
Get-Disk |
Get-Partition |
Where-Object DriveLetter |
Select-Object DriveLetter, @{n='MediaType';e={ $physicalDisk.MediaType }}
}
'''
file_name='powershell_file.ps1'
file_path=os.path.join(os.environ['TEMP'], file_name)
with open(file_path, 'wb') as wr:
wr.write(ps_content)
ecmd('powershell "Set-ExecutionPolicy RemoteSigned"')
check = ecmd('powershell "%s"'%file_path)
if check:
check = check.split()
if check[-1] == 'HDD':
process=ecmd("defrag -u %s\ "%check[-2])
fragmetpercent=re.findall("Total\s+fragmented\s+space\s+=\s+\d+%",process)
fragpercentage=int(fragmetpercent[0].split()[-1].replace("%",""))
if fragpercentage>=fragmentation_percentage:
alert(1)
processfragment=Popen("defrag %s\ /d /u "%check[-2])
print processfragment
else:
alert(0)
print "The fragement percentage is less than "fragmentation_percentage+"\n "+fragmetpercent[0]
else:
print "Device is not HDD"
Comments