Powershell磁盘空间脚本

时间:2014-04-16 12:28:06

标签: powershell alert diskspace

I have a powershell script。简而言之,该脚本可以从多个服务器收集磁盘空间信息,并将其放入可通过邮件发送的.htm报告中。

现在,脚本会将磁盘信息收集到报告中,但我希望它只在其中一个磁盘的可用空间低于脚本中定义的临界值时发送电子邮件。

剧本:

# First lets create a text file, where we will later save the freedisk space info 
$freeSpaceFileName = "c:\disk_space.htm" 
$serverlist = "c:\sl.txt" 
$warning = 50 
$critical = 10 
New-Item $freeSpaceFileName -ItemType file -Force 
# Getting the freespace info using WMI 
#Get-WmiObject win32_logicaldisk  | Where-Object {$_.drivetype -eq 3} | format-table DeviceID, VolumeName,status,Size,FreeSpace | Out-File "C:\temp\FreeSpace.txt 
# Function to write the HTML Header to the file 
Function writeHtmlHeader 
{ 
param($fileName) 
$date = ( get-date ).ToString('dd.MM.yyyy - HH:mm') 
Add-Content $fileName "<html>" 
Add-Content $fileName "<head>" 
Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>" 
Add-Content $fileName '<title>Disk Report</title>' 
add-content $fileName '<STYLE TYPE="text/css">' 
add-content $fileName  "<!--" 
add-content $fileName  "td {" 
add-content $fileName  "font-family: Tahoma;" 
add-content $fileName  "font-size: 11px;" 
add-content $fileName  "border-top: 1px solid #999999;" 
add-content $fileName  "border-right: 1px solid #999999;" 
add-content $fileName  "border-bottom: 1px solid #999999;" 
add-content $fileName  "border-left: 1px solid #999999;" 
add-content $fileName  "padding-top: 0px;" 
add-content $fileName  "padding-right: 0px;" 
add-content $fileName  "padding-bottom: 0px;" 
add-content $fileName  "padding-left: 0px;" 
add-content $fileName  "}" 
add-content $fileName  "body {" 
add-content $fileName  "margin-left: 5px;" 
add-content $fileName  "margin-top: 5px;" 
add-content $fileName  "margin-right: 0px;" 
add-content $fileName  "margin-bottom: 10px;" 
add-content $fileName  "" 
add-content $fileName  "table {" 
add-content $fileName  "border: thin solid #000000;" 
add-content $fileName  "}" 
add-content $fileName  "-->" 
add-content $fileName  "</style>" 
Add-Content $fileName "</head>" 
Add-Content $fileName "<body>" 

add-content $fileName  "<table width='100%'>" 
add-content $fileName  "<tr bgcolor='#CCCCCC'>" 
add-content $fileName  "<td colspan='7' height='25' align='center'>" 
add-content $fileName  "<font face='tahoma' color='#003399' size='4'><strong>Disk Report - $date</strong></font>" 
add-content $fileName  "</td>" 
add-content $fileName  "</tr>" 
add-content $fileName  "</table>" 

} 

# Function to write the HTML Header to the file 
Function writeTableHeader 
{ 
param($fileName) 

Add-Content $fileName "<tr bgcolor=#CCCCCC>" 
Add-Content $fileName "<td width='10%' align='center'>Drive</td>" 
Add-Content $fileName "<td width='50%' align='center'>Drive Label</td>" 
Add-Content $fileName "<td width='10%' align='center'>Total Capacity(GB)</td>" 
Add-Content $fileName "<td width='10%' align='center'>Used Capacity(GB)</td>" 
Add-Content $fileName "<td width='10%' align='center'>Free Space(GB)</td>" 
Add-Content $fileName "<td width='10%' align='center'>Freespace %</td>" 
Add-Content $fileName "</tr>" 
} 

Function writeHtmlFooter 
{ 
param($fileName) 

Add-Content $fileName "</body>" 
Add-Content $fileName "</html>" 
} 

Function writeDiskInfo 
{ 
param($fileName,$devId,$volName,$frSpace,$totSpace) 
$totSpace=[math]::Round(($totSpace/1073741824),2) 
$frSpace=[Math]::Round(($frSpace/1073741824),2) 
$usedSpace = $totSpace - $frspace 
$usedSpace=[Math]::Round($usedSpace,2) 
$freePercent = ($frspace/$totSpace)*100 
$freePercent = [Math]::Round($freePercent,0) 
 if ($freePercent -gt $warning) 
 { 
 Add-Content $fileName "<tr>" 
 Add-Content $fileName "<td>$devid</td>" 
 Add-Content $fileName "<td>$volName</td>" 
 Add-Content $fileName "<td>$totSpace</td>" 
 Add-Content $fileName "<td>$usedSpace</td>" 
 Add-Content $fileName "<td>$frSpace</td>" 
 Add-Content $fileName "<td bgcolor='#32B232' align=center>$freePercent</td>"
 Add-Content $fileName "</tr>" 
 } 
 elseif ($freePercent -le $critical) 
 { 
 Add-Content $fileName "<tr>" 
 Add-Content $fileName "<td>$devid</td>" 
 Add-Content $fileName "<td>$volName</td>" 
 Add-Content $fileName "<td>$totSpace</td>" 
 Add-Content $fileName "<td>$usedSpace</td>" 
 Add-Content $fileName "<td>$frSpace</td>" 
 Add-Content $fileName "<td bgcolor='#FF0000' align=center>$freePercent</td>"
 Add-Content $fileName "</tr>" 
 } 
 else 
 { 
 Add-Content $fileName "<tr>" 
 Add-Content $fileName "<td>$devid</td>" 
 Add-Content $fileName "<td>$volName</td>" 
 Add-Content $fileName "<td>$totSpace</td>" 
 Add-Content $fileName "<td>$usedSpace</td>" 
 Add-Content $fileName "<td>$frSpace</td>" 
 Add-Content $fileName "<td bgcolor='#E1E100' align=center>$freePercent</td>"
 Add-Content $fileName "</tr>" 
 } 
} 
Function sendEmail 
{ param($from,$to,$subject,$smtphost,$htmlFileName) 
$body = Get-Content $htmlFileName 
$smtp= New-Object System.Net.Mail.SmtpClient $smtphost 
$msg = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body 
$msg.isBodyhtml = $true 
$smtp.send($msg) 

} 

writeHtmlHeader $freeSpaceFileName 
foreach ($server in Get-Content $serverlist) 
{ 
 Add-Content $freeSpaceFileName "<table width='100%'><tbody>" 
 Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>" 
 Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server </strong></font></td>" 
 Add-Content $freeSpaceFileName "</tr>" 

 writeTableHeader $freeSpaceFileName 

 $dp = Get-WmiObject win32_logicaldisk -ComputerName $server |  Where-Object {$_.drivetype -eq 3} 
 foreach ($item in $dp) 
 { 
 Write-Host  $item.DeviceID  $item.VolumeName $item.FreeSpace $item.Size 
 writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size 

 } 
} 
writeHtmlFooter $freeSpaceFileName 
$date = ( get-date ).ToString('dd.MM.yyyy') 

#sendEmail cdarwin@evolve.com cdarwin@evolve.com "Disk Space Report - $Date" hub1 $freeSpaceFileName 

我已经尝试添加某种IF,但它没有用,

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我添加了几行代码来检查阈值,并仅在超过阈值时发送电子邮件。

$Threshold = 10GB; ########### Add this line
$ThresholdExceeded = $false; ############## Add this line

foreach ($server in Get-Content $serverlist) 
{ 
    Add-Content $freeSpaceFileName "<table width='100%'><tbody>" 
    Add-Content $freeSpaceFileName "<tr bgcolor='#CCCCCC'>" 
    Add-Content $freeSpaceFileName "<td width='100%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong> $server </strong></font></td>" 
    Add-Content $freeSpaceFileName "</tr>" 

    writeTableHeader $freeSpaceFileName 

    $dp = Get-WmiObject win32_logicaldisk -ComputerName $server |  Where-Object {$_.drivetype -eq 3} 
    foreach ($item in $dp) 
    {
        ################ Add this next line
        if ($Item.FreeSpace -lt $Threshold) { $ThresholdExceeded = $true; };             Write-Host  $item.DeviceID  $item.VolumeName $item.FreeSpace $item.Size 
        writeDiskInfo $freeSpaceFileName $item.DeviceID $item.VolumeName $item.FreeSpace $item.Size 

    } 
}

################### Add this code
if ($ThresholdExceeded) {
    sendEmail cdarwin@evolve.com cdarwin@evolve.com "Disk Space Report - $Date" hub1 $freeSpaceFileName;
}