0

リモート サーバー上のサービスをチェックし、サービスがダウンしている場合はメールを送信するために使用するスクリプトがあります。ただし、スクリプトの実行中にサーバーがダウンすると、スクリプトが長時間実行される可能性があります。プロセスをスピードアップする方法はありますか?完成までスクリプトを続けてほしいです。どんな助けでも大歓迎です。また、このスクリプトで改善できることが他にある場合は、powershell を初めて使用するのでお知らせください。ありがとう!

#******************  Function To Send E-Mail  ******************#

function sendEmail {

send-mailmessage -to "recipient <admin@mail.com>" -from "sender <admin@mail.com>" `
-subject "$eSubject" `
-body "$eBody" -smtpServer mail.smtpServer.com

}

#******************  Set Variables  ******************#
$erroractionpreference = "SilentlyContinue"
$date = Get-Date

$servicesPath = "C:\path_to_file\services.txt"
$serversPath = "C:\path_to_file\servers.txt"

$services = Get-Content $servicesPath
$servers = Get-Content $serversPath

#******************  Check Services And Send E-Mail  ******************#

foreach ($service in $services) { 

foreach ($server in $servers) 
{

    #Check If Service Exist On Server
    $checkService = Get-Service -ComputerName $server -DisplayName $service

    #If The Service Exists Evaluate Status
    if($checkService)
    {
        if ($checkService.status -notlike "Running")
        {
            #Get Server Last Boot Up Time, Set E-Mail Subject And Body, And Send E-Mail
            $OperatingSystem = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $server
            $LastBootUp = $OperatingSystem.ConvertToDateTime($OperatingSystem.LastBootUpTime)
            $eSubject = "$service DOWN on $server"
            $eBody = "$date`r`n$service DOWN on $server`r`nLast bootup time for $server is: $LastBootUp"
            sendEmail
        }
    }
}
}
4

1 に答える 1

0

を呼び出す前Get-Serviceに、サーバーがオンラインかどうかを確認してください。以下は、サーバーがオンラインであるかどうかを確認するために 1 つの ping を送信し、オンラインでない場合は の次の項目にスキップし$serversます。を呼び出す行の直前にこれを置きますGet-Service

if ((Test-Connection -computername $server -quiet -count 1) -eq $false) {
    continue;
}
于 2013-04-05T19:13:30.127 に答える