根据另一个单元格值为一个单元格着色

Color a cell on the basis of another cell value

我有一个文件 output.txt 包含以下内容:

SERVER_NAME MOUNT_POINT TOTAL_SPACE USED_SPACE USED_PERCENTAGE   AVAILABLE_SPACE
Server_1           /dev       1200G       537G             54%              464G
Server_2           /dev        600G       490G             85%               94G
Server_3           /dev        600G       402G             69%              181G
Backup_server     /storage     800G       682G             72%              278G

使用以下脚本,我格式化了 output.txt 文件以通过电子邮件接收通知。现在我正在尝试比较最后两列(USED_PERCENTAGEAVAILABLE_SPACE),如果特定单元格的 USED_PERCENTAGE 值大于 90%,则相应的 AVAILABLE_SPACE 单元格的背景应为红色。

你能告诉我如何在下面的脚本中做到这一点吗?

$smtpServer = "xyz.bla.com"
$smtpFrom = "No-reply@bla.com"
$smtpTo = "abc@mail.com"
$messageSubject = "Space notification"

$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true 

$data = Get-Content D:\output.txt | select -Skip 1 | ForEach-Object{
    $splitLine = $_ -split '\s+'
    [pscustomobject] @{
        'SERVER_NAME' = $splitLine[0]
        'MOUNT_POINT' = $splitLine[1]
        'TOTAL_SPACE' = $splitLine[2]
        'USED_SPACE' = $splitLine[3]
        'USED_PERCENTAGE' = $splitLine[4]
        'AVAILABLE_SPACE' = $splitLine[5]
    }
}

$headerStyle = 'style = "border: 1px solid black; background: #dddddd; padding: 5px;"'
$normalDataStyle =  'style = "border: 1px solid black; padding: 5px;text-align:center;"'
$backupRowStyle = 'bgcolor="#81F7F3"'
$normalRowStyle = 'bgcolor="#D0F5A9"'
$body = "<table style=`"border: 1px solid black; border-collapse: collapse;`">`r`n"
$body = $body + "<tr><th $headerStyle>SERVER_NAME</th><th $headerStyle>MOUNT_POINT</th><th $headerStyle>TOTAL_SPACE</th><th $headerStyle>USED_SPACE</th><th $headerStyle>USED_PERCENTAGE</th><th $headerStyle>AVAILABLE_SPACE</th></tr>`r`n"

$data | ForEach-Object{
    Switch($_.CLUSTER_NAME){
        "Server_1"{$rowStyle = $normalRowStyle}
        "Server_2"{$rowStyle = $normalRowStyle}
        "Server_3"{$rowStyle = $normalRowStyle}
        "Backup_server"{$rowStyle = $backupRowStyle}
        default{$rowStyle = ""}
    }
    $body = $body + "<tr $rowstyle><td $normalDataStyle>$($_.SERVER_NAME)</td><td $normalDataStyle>$($_.MOUNT_POINT)</td><td $normalDataStyle>$($_.TOTAL_SPACE)</td><td $normalDataStyle>$($_.USED_SPACE)</td><td $normalDataStyle>$($_.USED_PERCENTAGE)</td><td $normalDataStyle>$($_.AVAILABLE_SPACE)</td></tr>`r`n"
}

$body = '<body>' + $body + '</table><br/><br/><b>NOTE:</b> This is an automatically generated email, please do not reply to it.</body>'
$message.Body = $Body

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

如果有条件,您应该使用不同的样式来格式化您的 HTML 结果。为此,您为数据样式声明一个变量,如果您的条件为假,则该变量应等于 $normalDataStyle,如果条件为真,则为特殊样式。

$redDataStyle='style = "border: 1px solid black; background: #c00000; padding: 5px;text-align:center;"'
# add "background" parameter to normal style
$data | ForEach-Object{
    # <switch skipped>
    $spaceStyle=$normalDataStyle
    $percent = $_.USED_PERCENTAGE.substring(0,$_.USED_PERCENTAGE.indexOf("%")
    #strips "%" off percentage, making it a number
    if ($percent -gt 89) { $spaceStyle=$redDataStyle}
    $body = $body + "<tr $rowstyle><td $normalDataStyle>$($_.SERVER_NAME)</td><td $normalDataStyle>$($_.MOUNT_POINT)</td><td $normalDataStyle>$($_.TOTAL_SPACE)</td><td $normalDataStyle>$($_.USED_SPACE)</td><td $spaceStyle>$($_.USED_PERCENTAGE)</td><td $spaceStyle>$($_.AVAILABLE_SPACE)</td></tr>`r`n"
}