我编写了一个脚本,它将从文本文件中获取服务器详细信息并导出多个服务器的磁盘空间、RAM 和 CPU 利用率详细信息,并且该脚本正在按预期运行。现在,我的脚本将通过电子邮件发送如下报告。
有人可以帮我获取所需的输出吗:函数名称列需要包含在我的输出报告中的服务器名称旁边,以便可以轻松识别哪个是相应的服务器。
我可以使用如下所示的 Excel 表,请帮助我如何在脚本中使用该 Excel 表来获取所需的输出。
代码
## 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
答案1
将 Excel 表放入脚本(在 Powershell 中得到很好的支持)作为哈希表,其中服务器名称作为键,函数作为值,然后只需使用服务器名称添加附加列即可查找函数。