2

I have writtern a script which will take the servers details from a text file and export the Disk space, RAM and CPU utilization details for multiple servers and the script is working a expected. right now my script will send eamil with the report as below.

enter image description here

Can someone help me to get the required output: the Function name column need to be included in my output report beside the Server name so that it will be easily identified like which is respective servers.

I can use the excel sheet as below, please help me on how to use that excel sheet in my script to get the required output.

enter image description here

CODE

## 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
9
  • try to simplify your code to do ONLY what your Question asks about. if you have not done so yet, please read the Tour page for this site. your reputation score indicates that you have not. ///// also, convert your image of data into text - and sanitize it as needed. right now your two data files don't have any linking value ... and i suspect that your real data has the same server names.
    – Lee_Dailey
    Commented Apr 13, 2022 at 17:37
  • Not getting what you are saying
    – chandu
    Commented Apr 13, 2022 at 17:41
  • from the text of your Question >>> But my question is like i want get the Function name column as well in the output report beside the Server name so that it will be easily identified like which is respective servers. <<< your code and data should only cover that. keep things limited to the specifics ... as the Tour page instructs on How to ask a Good Question. [grin]
    – Lee_Dailey
    Commented Apr 13, 2022 at 17:54
  • Edited my question
    – chandu
    Commented Apr 13, 2022 at 17:56
  • Hi @chandu, are you able to get the Excel spreadsheet as csv rather than Excel? I think with CSV, you could join the data more easily from the two with some conditional logic and perhaps a loop to create the HTML before sending it via email. I'd start by playing with it dumping to an HTML file and opening that to see it while I iron it out. Then once that's set, run the logic to send HTML in the email body. Commented Apr 13, 2022 at 18:02

1 Answer 1

0

Bring the Excel sheet into the script (well supported in Powershell) as a hashtable with servername as the key and function as the value, then simply add an additional column using the servernames to look up the function.

4
  • Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – Community Bot
    Commented Apr 13, 2022 at 19:50
  • Can you please help me with the script if possible
    – chandu
    Commented Apr 14, 2022 at 5:11
  • What part do you need help with? Adding the column, the excel import, or what?
    – ejkeep
    Commented Apr 15, 2022 at 14:45
  • The excel import and print the details of the server which have less space in the email body
    – chandu
    Commented May 4, 2022 at 14:14

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .