# 恢復Powershell的默認執行策略,默認不容許執行任何腳本
# Set-executionpolicy default -force
#設置Powershell的執行策略爲,能夠執行任何腳本
# Set-ExecutionPolicy Unrestricted -forceshell
#定義一個發送郵件的函數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)服務器
}ide
#調用函數測試
#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 }
}rest
#調用函數測試
#startService XLServicePlatform Themesorm
#檢測服務器服務
#定義要檢查的服務名稱,注意不是顯示名稱
$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 ) #循環退出條件對象