简体   繁体   English

我创建了一个 Hyper-V 副本警报脚本,但在满足条件时努力让它提醒我

[英]I've created an Hyper-V replica Alert Script but struggling to get it alert me when an condition is met

$status = Get-VMReplication | Select-Object Name, State, Health, Mode, FrequencySec, PrimaryServer, ReplicaServer, ReplicaPort | ConvertTo-Html
$Company = ""
$ReplicationHealth = (Get-VMReplication)
function ReplicationHealthFailedTelegram {
    $token = (Get-Content -Path C:\temp\telegrambot\token.txt)
    $chatid = (Get-Content -Path C:\temp\telegrambot\chatid.txt)
    $Message = "Replication Failed"
    $Company = ""
    $status = Get-VMReplication | Select-Object Name, State, Health, Mode, FrequencySec, PrimaryServer, ReplicaServer, ReplicaPort | ConvertTo-Html
    & 'C:\Program Files\PowerShell\7\pwsh.exe' -Command { $token = (Get-Content -Path C:\temp\telegrambot\token.txt);$chatid = (Get-Content -Path C:\temp\telegrambot\chatid.txt); $status = Get-VMReplication | Select-Object Name, State, Health, Mode, FrequencySec, PrimaryServer, ReplicaServer, ReplicaPort | ConvertTo-Html;$Message = "Replication Failed";$Company = "Howard Matthews Partnership - Harrogate";Send-TelegramTextMessage -BotToken $token -ChatID $chatid -Message $Company $Message}
    }
function EmailAlert {
    $User = "alert@domain.co.uk"
    $File = (Get-Content C:\Temp\pw.txt | ConvertTo-SecureString)
    $MyCredential = New-Object -TypeName System.Management.Automation.PSCredential `
    -ArgumentList $User, $File

            $To = "domain.co.uk"
            $from = "domain.co.uk"
            $EmailSubject = "Hyper-V Replication Error $Company"
            $smtp = "auth.smtp.1and1.co.uk"
            $DefaultMessage="
                <p>Dear Help,</p>
                <p>Replication has failed for $Company </p>
                <p>$status</p>
                <p>The Robot Checker .<br><br>
                </p>"

            $MailMessage = @{
                    To = $To
                    From = $from
                    # BCC = $Bcc
                    Subject = $EmailSubject
                    Body = $DefaultMessage
                    priority = "High"
                    Smtpserver = $smtp
                    Credential = $MyCredential
                    ErrorAction = "SilentlyContinue" 
                }

            Send-MailMessage @MailMessage -bodyashtml
}

if ($ReplicationHealth.health) {
    "Critical","Warning"
    EmailAlert
    ReplicationHealthFailedTelegram
} else {
    $null
}

The Email sends but it regardless if the status of the replication is normal, warning or critical. Email 发送但不管复制状态是正常、警告还是严重。 How would I go by adding the logic of getting to send me an email when that health status is Critical or Warning and not send me an email when it's normal.我将如何通过添加在健康状态为严重或警告时向我发送 email 而在正常时不向我发送 email 的逻辑来 go。

Many Thanks!非常感谢!

This bit doesn't do what you think it should这一点没有做你认为应该做的事情

if ($ReplicationHealth.health) {
    "Critical","Warning"
    EmailAlert
    ReplicationHealthFailedTelegram
} else {
    $null
}

With your if you are basically asking;如果你基本上是在问你的话; "is $ReplicationHealth.Health a thing?" “$ReplicationHealth.Health 是一回事吗?” rather than checking for the value "of the thing", and the answer will always be yes in this case assuming nothing went wrong running Get-VMReplication .而不是检查“事物”的值,在这种情况下,假设运行Get-VMReplication没有出现任何问题,答案将始终是肯定的。

A different example to demonstrate what I mean could be something like the following一个不同的例子来证明我的意思可能是这样的

if($(Get-ChildItem -Path "$env:windir\System32\WindowsPowerShell\v1.0\powershell.exe").Extension) { "Yup, .Extension is a thing" } else { "Nah, it's not!" }
if($(Get-ChildItem -Path "$env:windir\System32\WindowsPowerShell\v1.0\powershell.exe").Extension -eq ".exe") { "Yup, .Extension is a thing and its value is `'.exe`'" } else { "Nah, it's not!" }

In order to fix your if, you could try something like为了解决您的问题,您可以尝试类似

if($ReplicationHealth.Health -eq "Critical" -or $ReplicationHealth.Health -eq "Warning") {
    EmailAlert
    ReplicationHealthFailedTelegram
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM