Quantcast
Channel: Windows PowerShell forum
Viewing all articles
Browse latest Browse all 21975

Powershell Script help

$
0
0

I have a script that I run daily using a scheduled task that goes through each of my servers and e-mails me the disk space results. However, one of my servers is now using mount points and I want to be able to include these in the results.

I am fairly new to Powershell and I would like to know what to add and where to achieve this result. 

Here is the code:

# Configuration data. 
# Add your machine names to check for to the list: 
[String[]] $servers   = @("Server names here"); 
[float]  $levelWarn   = 20.0; 
[float]  $levelAlarm  = 10.0; 
[string] $smtpServer  = "SMTP Server"; 
[string] $sender      = "Email Address";
[string] $receiver    = "Email Address";
[string] $subject     = "US Disk usage report"; 
[bool]   $asHtml      = $true; 
[string] $body = [String]::Empty; 
if ($asHtml) 
{ 
    $body += "<head><title>Disk usage report</title><style> 
              .table {border-collapse: collapse;  border: 1px solid #808080;} 
              .paragraph  {font-family: Arial;font-size:large;text-align: left;border} 
              .boldLeft   {font-family: Arial;font-size:large;text-align: left;border: 1px solid #808080;} 
              .boldRight  {font-family: Arial;font-size:large;text-align: right;border: 1px solid #808080;} 
              .smallLeft  {font-family: Arial;text-align: left;border: 1px solid #808080;} 
              .smallRight {font-family: Arial;text-align: right;border: 1px solid #808080;} </style></head><body>"; 
} 
else 
{ 
    $body += "Disk usage report`n`n"; 
} 
Clear-Host; 
Write-Host "Started"; 
### Functions. 
function getTextTableHeader 
{ 
    [String] $textHeader = [String]::Empty; 
    $textHeader += "Drv "; 
    $textHeader += "Vol Name        "; 
    $textHeader += "     Size MB "; 
    $textHeader += "     Free MB "; 
    $textHeader += "    Free % "; 
    $textHeader += "Message      `n"; 
    $textHeader += "--- "; 
    $textHeader += "--------------- "; 
    $textHeader += "------------ "; 
    $textHeader += "------------ "; 
    $textHeader += "---------- "; 
    $textHeader += "------------ `n"; 
    return $textHeader; 
} 
function getTextTableRow 
{ 
    param([object[]] $rowData) 
    [String] $textRow = [String]::Empty; 
    $textRow += $rowData[0].ToString().PadRight(4); 
    $textRow += $rowData[1].ToString().PadRight(16); 
    $textRow += $rowData[2].ToString("N0").PadLeft(12) + " "; 
    $textRow += $rowData[3].ToString("N0").PadLeft(12) + " "; 
    $textRow += $rowData[4].ToString("N1").PadLeft(10) + " "; 
    $textRow += $rowData[5].ToString().PadRight(13); 
    return $textRow; 
} 
function getHtmlTableHeader 
{ 
    [String] $header = [String]::Empty; 
    $header += "<table style=""width: 100%"" class=""table""><tr class=""boldLeft""> <th class=""boldLeft"">Drv</th> <th class=""boldLeft"">Vol Name</th> <th class=""boldRight"">Size MB</th> <th class=""boldRight"">Free MB</th> <th class=""boldRight"">Free %</th> <th class=""boldLeft"">Message</th></tr>"; 
    return $header; 
} 
function getHtmlTableRow 
{ 
    param([object[]] $rowData) 
    [String] $textRow = [String]::Empty; 
    $textRow += "<tr class=""smallLeft""> <td class=""smallLeft"">"  + $rowData[0].ToString()     + "</td> <td class=""smallLeft"">"  + $rowData[1].ToString()     + "</td> <td class=""smallRight"">" + $rowData[2].ToString("N0") + "</td> <td class=""smallRight"">" + $rowData[3].ToString("N0") + "</td> <td class=""smallRight"">" + $rowData[4].ToString("N1") + "</td> <td class=""smallLeft"">"  + $rowData[5].ToString()     + "</td></tr>"; 
    return $textRow; 
} 
foreach($server in $servers) 
{ 
    $disks = Get-WmiObject -ComputerName $server -Class Win32_LogicalDisk -Filter "DriveType = 3"; 
    if ($asHtml) 
    {   $body += ("<p class=""paragraph"">Server: {0}`tDrives #: {1}</p>`n" -f $server, $disks.Count); 
         $body += getHtmlTableHeader; 
    } 
    else 
    {    $body += ("Server: {0}`tDrives #: {1}`n" -f $server, $disks.Count); 
        $body += getTextTableHeader; 
    } 
    foreach ($disk in $disks) 
    { 
        [String] $message = [String]::Empty; 
        if (100.0 * $disk.FreeSpace / $disk.Size -le $levelAlarm) 
        {   $message = "Alarm !!!";   } 
        elseif (100.0 * $disk.FreeSpace / $disk.Size -le $levelWarn) 
        {   $message = "Warning !";   } 
        [Object[]] $data = @($disk.DeviceID, 
                             $disk.VolumeName,  
                             [Math]::Round(($disk.Size / 1048576), 0),  
                             [Math]::Round(($disk.FreeSpace / 1048576), 0), `
                             [Math]::Round((100.0 * $disk.FreeSpace / $disk.Size), 1), 
                             $message) 
        if ($asHtml) 
        {    $body += getHtmlTableRow -rowData $data;    } 
        else 
        {    $body += getTextTableRow -rowData $data;    } 
        $body += "`n"; 
    } 
    if ($asHtml) 
    {   $body += "</table>`n";    } 
    else 
    {    $body += "`n";    } 
} 
if ($asHtml) 
{   $body += "</body>";    } 
# Init Mail address objects 
$smtpClient = New-Object Net.Mail.SmtpClient($smtpServer); 
$emailFrom  = New-Object Net.Mail.MailAddress $sender, $sender; 
$emailTo    = New-Object Net.Mail.MailAddress $receiver , $receiver; 
$mailMsg    = New-Object Net.Mail.MailMessage($emailFrom, $emailTo, $subject, $body); 
$mailMsg.IsBodyHtml = $asHtml; 
$smtpClient.Send($mailMsg) 
Write-Host "Finished";

Thanks, 



Viewing all articles
Browse latest Browse all 21975

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>