多台服务器的磁盘空间报告

多台服务器的磁盘空间报告

我编写了一个脚本,用于导出多台服务器的磁盘空间、RAM 和 CPU 利用率详细信息,该脚本运行正常。我只想对输出文件进行更改,即现在我的脚本将使用邮件正文输出中的 html 文件发送邮件。

但我的问题是我想将整个报告附加到邮件中,并仅在电子邮件正文中显示 $percentCritcal = 30; 的服务器详细信息。

代码

## Set Root Location
Set-Location $PSScriptRoot

# Continue even if there are errors 
$ErrorActionPreference = "Continue"; 
 
# Set your warning and critical thresholds 
$percentWarning = 100; 
$percentCritcal = 30; 
 
# REPORT PROPERTIES 
 # Path to the report 
  $reportPath = "$PSScriptRoot\"; 
 
 # Report name 
  $reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html"; 
 
# Path and Report name together 
$diskReport = $reportPath + $reportName 
 
#Set colors for table cell backgrounds 
$redColor = "#FF0000" 
$orangeColor = "#FBB917" 
$whiteColor = "#FFFFFF" 
 
# Count if any computers have low disk space.  Do not send report if less than 1. 
$i = 0; 
 
# Get computer list to check disk space 
$computers = Get-Content ".\Servers.txt"; 
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss"; 
 
# Remove the report if it has already been run today so it does not append to the existing report 
If (Test-Path $diskReport) 
    { 
        Remove-Item $diskReport 
    } 
 
# Cleanup old files.. 
$Daysback = "-7" 
$CurrentDate = Get-Date; 
$DateToDelete = $CurrentDate.AddDays($Daysback); 
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item; 
 
# Create and write HTML Header of report 
$titleDate = get-date -uformat "%m-%d-%Y - %A" 
$header = " 
  <html> 
  <head> 
  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> 
  <title>DiskSpace Report</title> 
  <STYLE TYPE='text/css'> 
  <!-- 
  td { 
   font-family: Calibri; 
   font-size: 12px; 
   border-top: 1px solid #999999; 
   border-right: 1px solid #999999; 
   border-bottom: 1px solid #999999; 
   border-left: 1px solid #999999; 
   padding-top: 0px; 
   padding-right: 0px; 
   padding-bottom: 0px; 
   padding-left: 0px; 
  } 
  body { 
   margin-left: 5px; 
   margin-top: 5px; 
   margin-right: 0px; 
   margin-bottom: 10px; 
   table { 
   border: thin solid #000000; 
  } 
  --> 
  </style> 
  </head> 
  <body> 
  <table width='100%'> 
  <tr bgcolor='#548DD4'> 
  <td colspan='7' height='30' align='center'> 
  <font face='calibri' color='#eef4f0' size='5'><strong>Disk Space Daily Report for $titledate</strong></font> 
  </td> 
  </tr> 
  </table> 
" 
 Add-Content $diskReport $header 
 
# Create and write Table header for report 
 $tableHeader = " 
 <table width='100%'><tbody> 
 <tr bgcolor=#deedf0> 
 <td width='17%' align='center'<b>Server</b></td> 
 <td width='5%'  align='center'><b>Drive</b></td> 
 <td width='12%' align='center'><b>Drive Label</b></td> 
 <td width='10%' align='center'><b>Total Capacity(GB)</b></td> 
 <td width='10%' align='center'><b>Used Capacity(GB)</b></td> 
 <td width='10%' align='center'><b>Free Space(GB)</b></td> 
 <td width='6%'  align='center'><b>Freespace %</b></td> 
 <td width='5%'  align='center'><b>RAM %</b></td>
  <td width='5%'  align='center'><b>CPU %</b></td>
 </tr> 
" 
Add-Content $diskReport $tableHeader 
  
# Start processing disk space 
  foreach($computer in $computers) 
 {  
 $disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" 
 $computer = $computer.toupper() 
  foreach($disk in $disks) 
 {         
  $deviceID = $disk.DeviceID; 
        $volName = $disk.VolumeName; 
  [float]$size = $disk.Size; 
  [float]$freespace = $disk.FreeSpace;  
  $percentFree = [Math]::Round(($freespace / $size) * 100); 
  $sizeGB = [Math]::Round($size / 1073741824, 2); 
  $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2); 
        $usedSpaceGB = $sizeGB - $freeSpaceGB; 
        $color = $whiteColor; 
# Start processing RAM      
  $RAM = Get-WmiObject -ComputerName $computer -Class Win32_OperatingSystem
    $RAMtotal = $RAM.TotalVisibleMemorySize;
    $RAMAvail = $RAM.FreePhysicalMemory;
        $RAMpercent = [Math]::Round(($RAMavail / $RAMTotal) * 100);

# Start processing CPU
 $CPUpercent = Get-WmiObject -ComputerName $computer -Class win32_processor | 
 Measure-Object -property LoadPercentage -Average | Select-Object -ExpandProperty Average
        
# Set background color to Orange if just a warning 
 if($percentFree -lt $percentWarning)       
  { 
    $color = $orangeColor  
 
# Set background color to Orange if space is Critical 
      if($percentFree -lt $percentCritcal) 
        { 
        $color = $redColor 
       }         
  
 # Create table data rows  
    $dataRow = " 
  <tr> 
        <td width='10%'>$computer</td> 
  <td width='5%' align='center'>$deviceID</td> 
  <td width='10%' >$volName</td> 
  <td width='10%' align='center'>$sizeGB</td> 
  <td width='10%' align='center'>$usedSpaceGB</td> 
  <td width='10%' align='center'>$freeSpaceGB</td> 
  <td width='5%' bgcolor=`'$color`' align='center'>$percentFree</td> 
  <td width='5%' align='center'>$RAMpercent</td>
  <td width='5%' align='center'>$CPUpercent</td>
  </tr> 
" 
Add-Content $diskReport $dataRow; 
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree"; 
    $i++   
  } 
 } 
} 

# Create table at end of report showing legend of colors for the critical and warning 
 $tableDescription = " 
 </table><br><table width='20%'> 
 <tr bgcolor='White'> 
    <td width='10%' align='center' bgcolor='#FBB917'>No Warning</td> 
 <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td> 
 </tr> 
" 
 Add-Content $diskReport $tableDescription 
 Add-Content $diskReport "</body></html>" 

 $Finalreport = get-content $diskReport 

#########################Send Email with All Disk Space Reports###############
Send-MailMessage @hash

相关内容