locked
Issue with 3rd threshold setting for disk space report RRS feed

  • Question

  • Hello,

    I have below script which generates a report relating disk space of various servers included in the input .csv or .txt file. The script is not reading the GREEN status script correct meaning, any disk status that does not meet the threshold setting for RED or ORANGE, should be included in the report with GREEN, but that's not happening. Can you please help to fix the code? Greatly appreciate it. The RED and ORANGE status disk info is correctly displayed on the report, but no info at all relating to GREEN.

    #############################################################################

    # Continue even if there are errors

    $ErrorActionPreference = "Continue";

    #########################################################################################

    # Items to change to make it work for you.

    #

    # EMAIL PROPERTIES

    #  - the $users that this report will be sent to.

    #  - near the end of the script the smtpserver, From and Subject.

    # REPORT PROPERTIES

    #  - you can edit the report path and report name of the html file that is the report. 

    #########################################################################################
    # Set your warning and critical thresholds

    $percentageGood = 31;

    $percentWarning = 30;

    $percentCritcal = 15;

    # EMAIL PROPERTIES

     # Set the recipients of the report.

      $users = "allserverusers@mycompany.com"

        #$users = "You@company.com" # I use this for testing by uing my email address.

      #$users = "you@company.com", "manager@company.com", "etc@company.com";  # can be sent to individuals.

    # REPORT PROPERTIES

     # Path to the report

      $reportPath = "D:\Powershellscripts\";

     # 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"

    $greenColor = "#008000"

    # 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 "D:\PowerShellScripts\ServerList.csv";

    $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: Tahoma;

       font-size: 11px;

       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='#CCCCCC'>

      <td colspan='7' height='25' align='center'>

      <font face='tahoma' color='#003399' size='4'><strong>AEM Environment DiskSpace 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=#CCCCCC>

        <td width='10%' align='center'>Server</td>

     <td width='5%' align='center'>Drive</td>

     <td width='15%' align='center'>Drive Label</td>

     <td width='10%' align='center'>Total Capacity(GB)</td>

     <td width='10%' align='center'>Used Capacity(GB)</td>

     <td width='10%' align='center'>Free Space(GB)</td>

     <td width='5%' align='center'>Freespace %</td>

     </tr>

    "

    Add-Content $diskReport $tableHeader

    # Start processing disk space reports against a list of servers

      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, 2);

      $sizeGB = [Math]::Round($size / 1073741824, 2);

      $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);

            $usedSpaceGB = $sizeGB - $freeSpaceGB;

            $color = $whiteColor;

    # Set background color to Orange if just a warning

     if($percentFree -lt $percentWarning)      

      {

        $color = $orangeColor 

    # Set background color to Red if space is Critical

          if($percentFree -lt $percentCritcal)

            {

            $color = $redColor

           } 

     # Set background color to Green if space is Critical

          if($percentFree -gt $percentageGood)

            {

            $color = $greenColor

           }       

     # Create table data rows 

        $dataRow = "

      <tr>

            <td width='10%'>$computer</td>

      <td width='5%' align='center'>$deviceID</td>

      <td width='15%' >$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>

      </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'>Warning less than 30% free space</td>

     <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 15% free space</td>

     </tr>

    "

      Add-Content $diskReport $tableDescription

     Add-Content $diskReport "</body></html>"

     

    # Send Notification if alert $i is greater then 0

    if ($i -gt 0)

    {

        foreach ($user in $users)

    {

            Write-Host "Sending Email notification to $user"


      $smtpServer = "smtp.mycompany.com"

      $smtp = New-Object Net.Mail.SmtpClient($smtpServer)

      $msg = New-Object Net.Mail.MailMessage

      $msg.To.Add($user)

            $msg.From = "serveradmins@mycompany.com"

      $msg.Subject = "Environment DiskSpace Report for $titledate"

            $msg.IsBodyHTML = $true

            $msg.Body = get-content $diskReport

      $smtp.Send($msg)

            $body = ""

        }

      }

    Thanks.

    Victor


    Victor


    • Edited by vr123 Saturday, April 11, 2020 8:14 PM Incorrect problem description
    Saturday, April 11, 2020 7:24 PM

Answers

  • You're missing a closing curly brace in your code. It should be:

        if ($percentFree -lt $percentWarning) {
                    $color = $orangeColor
        }

    Once you fix that, you have a superfluous "}" right before the line:

        # Create table at end of report showing legend of colors for the critical and warning

    You should try using a good code editor that will point out gross errors and also offer an option to format your code in a consistent way. The automatic formatting will help you discover things link missing/mismatched parentheses, brackets, braces, single quotes, double quotes, etc.


    --- Rich Matheisen MCSE&I, Exchange Ex-MVP (16 years)

    • Marked as answer by vr123 Monday, April 13, 2020 5:23 AM
    Sunday, April 12, 2020 7:49 PM

All replies

  • I have to tell you what we have to tell all new to forums.  Please edit your post and post correctly formatted and indented code using the code posting tool.  There is no way to read or copy what you posted.

    Do not post code that is double and triple spaced.

    Please read teh following instructions and fix you original post:

    Read the following to understand how to post a good technical question.


    \_(ツ)_/

    Saturday, April 11, 2020 7:47 PM
  • Also np0ote that we cannot fix or rewrite scripts that you have copied from the Internet.  This forum is only for scripts that you have written.

    Please carefully review the following links to set your expectation for posting in technical forums.


    \_(ツ)_/

    Saturday, April 11, 2020 7:49 PM
  • You're missing a closing curly brace in your code. It should be:

        if ($percentFree -lt $percentWarning) {
                    $color = $orangeColor
        }

    Once you fix that, you have a superfluous "}" right before the line:

        # Create table at end of report showing legend of colors for the critical and warning

    You should try using a good code editor that will point out gross errors and also offer an option to format your code in a consistent way. The automatic formatting will help you discover things link missing/mismatched parentheses, brackets, braces, single quotes, double quotes, etc.


    --- Rich Matheisen MCSE&I, Exchange Ex-MVP (16 years)

    • Marked as answer by vr123 Monday, April 13, 2020 5:23 AM
    Sunday, April 12, 2020 7:49 PM
  • Rich,

    Good catch with the curly brace and I was able to get all the three different status correctly in the report. Greatly appreciate your help. I do have one more question: When the code loops through the input file, I would like to see bold the row line for each group of server. Here is an example:

    Input File

    server1 C:

    server1 D:

    server1 E:

    server1 L:

    server2 C:

    server2 D:

    server2 E:

    server2 L:

    and so on......

    On the report's html table rows, after each server, I would like to have a bottom bold line to show separation between the servers in the report more clearly. Here is an example:

    

    Thanks again!

    Victor


    Victor

    Monday, April 13, 2020 5:41 AM
  • Not really a Powershell issue, but using CSS is the way to accomplish this.

    For an example, see https://www.html.am/html-codes/tables/table-border.cfm


    --- Rich Matheisen MCSE&I, Exchange Ex-MVP (16 years)

    Monday, April 13, 2020 2:35 PM