# 恢複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,如需轉載請自行聯系原作者