天天看點

Powershell檢測并啟動多個服務

# 恢複Powershell的預設執行政策,預設不允許執行任何腳本

# Set-executionpolicy   default  -force

#設定Powershell的執行政策為,可以執行任何腳本

# Set-ExecutionPolicy  Unrestricted  -force

#定義一個發送郵件的函數sendEmail(收件人位址,發件人位址,郵件伺服器,郵件伺服器端口,郵件伺服器登陸密碼,郵件标題,郵件正文)

Function sendEmail([string]$to,[string]$from,[string]$smtpServer,[int]$port,[string]$password,[string]$subjet,[string]$body )

{

#生成一個.Net郵件用戶端對象,參數是伺服器的位址和端口

$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)

#使用SSL加密

$SMTPClient.EnableSsl = $true 

#提供郵件用戶端類使用的使用者名和密碼

$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($from, $password)

#調用send方法發送郵件

$SMTPClient.Send($from,$to, $Subject, $Body)

}

#調用函數測試

#sendEmail "收件人Email位址" "發件人Email位址" "smtp.163.com" 25 "密碼" "郵件标題" "郵件正文"

#檢查服務狀态的函數,如果有一個或多個服務停止則傳回false,參數是服務的名字,可以指定多個名字用空格隔開

 Function checkService(){

         #循環檢查參數傳遞進來的每一個服務,如果有一個服務的狀态不是 "Running",則傳回 "sorry",注意這裡的傳回值和C#的寫法不同

         if ( $args | Foreach { Get-Service  -Name $_ | where Status -NE Running } ) {

            Write-Output sorry

         }

         else{

            Write-Output OK

 }

#checkService XLServicePlatform Themes

#啟動服務的函數,參數為需要檢測并啟動的服務名稱,可以指定多個參數,用空格分隔

#功能為循環檢查傳遞進來的每一個服務,如有服務的狀态不是“Running”,則啟動這個服務

Function startService(){

        $args | Foreach { Get-Service -Name $_ |where Status -NE Running | Start-Service }

#startService XLServicePlatform Themes

#檢測伺服器服務

#定義要檢查的服務名稱,注意不是顯示名稱

$service_Name= "XLServicePlatform","Themes"

$flag=0

Do

    $TorF=checkService $service_Name

    #第一次執行

    if( $TorF -eq "sorry"){

    startService $service_Name

    sendEmail "收件@qq.com" "發件@163.com" "smtp.163.com" 25 "發件郵箱密碼" "伺服器報警" "有一個或多服務運作不正常,我們已經嘗試啟動服務,如果多次收到此郵件,請馬上檢查你的伺服器。" 

    $flag=$flag+1

    }

    #檢測間隔,時間機關為秒。

    sleep(10)

}While($flag -le 3 )  #循環退出條件

本文轉自秘飛虎51CTO部落格,原文連結: http://blog.51cto.com/mifeihu/1602575,如需轉載請自行聯系原作者

繼續閱讀