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 )  #循环退出条件


本文出自 “秘飞虎的空间” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。