我有一个简单的脚本,在远程服务器上检查磁盘空间,它有一个简单的输出格式是如下颜色编码细胞基于标准
我想什么要做的是根据各自的价值对单个单元格进行颜色编码。具体来说,如果任何驱动器上的可用空间小于300,我希望单元格的阴影为RED。根据PowerShell Send-MailMessage
以HTML格式发送的结果,执行此操作的最简单方法是什么?
下面的代码我已经得到了从远程服务器收集数据:
function Set-AlternatingRows {
[CmdletBinding()]
Param(
[Parameter(Mandatory,ValueFromPipeline)]
[string]$Line,
[Parameter(Mandatory)]
[string]$CSSEvenClass,
[Parameter(Mandatory)]
[string]$CSSOddClass
)
Begin {
$ClassName = $CSSEvenClass
}
Process {
if ($Line.Contains("<tr><td>")) {
$Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
if ($ClassName -eq $CSSEvenClass) {
$ClassName = $CSSOddClass
} else {
$ClassName = $CSSEvenClass
}
}
return $Line
}
}
foreach ($Item in $InputCSV) {
Write-Host "Checking $($Item.Server) now"
$ShortDate = (Get-Date).ToString('MM/dd/yyyy')
$Ping = PingEM $Item.Server
### Check if server is online before proceeding
if ($Ping -eq "Online") {
Write-Host "$($Item.Server) is Online" -ForegroundColor Green
$FreeSpaceAll = Get-WmiObject Win32_LogicalDisk -filter "DriveType=3" -Computer $($Item.Server) |
Select SystemName, DeviceID, VolumeName,
@{Name="Total Size (GB)";E={"{0:N1}" -f($_.Size/1gb)}},
@{Name="Free Space (GB)";E={"{0:N1}" -f($_.Freespace/1gb)}}
$FreeSpaceC = $FreeSpaceAll | Where {$_.DeviceID -eq "C:"} | Select -expand "Free Space (GB)"
$FreeSpaceD = $FreeSpaceAll | Where {$_.DeviceID -eq "D:"} | Select -expand "Free Space (GB)"
$FreeSpaceE = $FreeSpaceAll | Where {$_.DeviceID -eq "E:"} | Select -expand "Free Space (GB)"
} # Ping
$outarray += New-Object PsObject -Property @{
Server = $Item.Server
FreeSpaceAll = $FreeSpaceAll
FreeSpaceC = $FreeSpaceC
FreeSpaceD = $FreeSpaceD
FreeSpaceE = $FreeSpaceE
PingResults = $Ping
} # OutArray New-Object
} # For
$Head = Get-Content "$Dir\CSS.txt"
$Pre = "This email contains info on C/D/E free space on remote servers<br> <br>"
$Pre += "The below report data is available in Excel .CSV format $Link1. After 7 days, the reports will be moved $Link2 <br><br>"
$Output = $OutArray |
Select Server, PingResults, @{E={$_.FreeSpaceC};Label="Free Space C: (GB)"},
@{E={$_.FreeSpaceD};Label="Free Space D: (GB)"},
@{E={$_.FreeSpaceE};Label="Free Space E: (GB)"} |
ConvertTo-Html -Head $Head -PreContent $Pre -As Table | Set-AlternatingRows -CSSOddClass odd -CSSEvenClass even |
Out-String
$Subject = "($ScriptVer) - file server C/D/E free space report"
$TSBody = ""
$TSBody += "<font face ='arial' color='black'>$Output </font><br><br>"
Send-NailMessage $To -Subject $Subject -Body $TSbody -BodyAsHtml -From $From -SmtpServer $Mailer
你将不得不自己创建HTML表,因为内建不要小号像你所要求的那样支持条件格式。你有没有尝试过?我甚至没有试图在这里制作任何HTML输出。 – Matt
http://stackoverflow.com/questions/37662940/convertto-html-highlight-the-cells-with-special-values? – Matt
发布更新失踪代码。我看着下面的StackOverflow [链接](http://stackoverflow.com/questions/4559233/technique-for-selectively-formatting-data-in-a-powershell-pipeline-and-output-as)职位,但无法使用它处理我的代码,例如使用.XML,而不是HTML,而且我不熟悉如何将XML转换为HTML以便与Powershell发送消息功能一起使用。 – Kenny