Code block

Google Code Prettify + AD Sense

2016年11月1日 星期二

自動啟動被 SharePoint 2013 設定精靈停止的服務

Share Point 2013會因為在本機執行「SharePoint設定精靈」,依照服務的機制,設定精靈會讓部分服務停止,等待設定完畢之後再重新啟動服務,這些會被停止的服務包括:
  • SPSAdminV4
  • SPTimerV4
  • SPSearchController
有時候系統管理者只是不慎點到「SharePoint設定精靈」,因此會按下「取消」按鈕來關閉設定精靈,但是停止的服務便不會再度啟動

為了避免這樣手誤,寫一隻powershell每分鐘來觀察服務被停止的時候,是否「設定精靈」在執行中。
如果設定精靈結束,但服務又沒被帶起來,PowerShell會自動啟動服務

以下為Script內容:

## 欲監控之SPS服務列表
$Service_List= "SPAdminV4","SPTimerV4","SPSearchHostController"
## SPS 設定精靈Process名稱
$SPSCFGWIZ = "psconfigui"

## 指定Mail寄送之SMTP主機
$SMTPServer = "relay.foo.com.tw"
## 指定Mail收件者
$MailTo = "Server Admin<itsa@foo.com.tw>"

##### 檢查程序 #####
## 取得Service狀態
$TargetService = Get-Service |Where-Object Name -in $Service_List
$Process_Check = Get-Process |Where-Object ProcessName -like ${SPSCFGWIZ}*

## 符合條件之後續處理
ForEach ($SVC in $TargetService) {
 IF ($SVC.Status -eq "Stopped" -and -Not $Process_Check) {
  $Begin_Time = Get-Date
  Start-Service $SVC.Name
  $End_Time = Get-Date
  
  $MailFrom = "Watch Dog <" + $env:USERNAME + "@" + ([system.net.dns]::GetHostByName('').HostName) + ">"
  $MailSubject = "檢測通知:" + $SVC.DisplayName + "服務已重新啟動"
  $MailBody = "Hi," + " `r`n`t" + "主機:" + $env:computername +  " 的 " + $SVC.DisplayName + " 服務於 "  + $Begin_Time.ToString("yyyy/MM/dd HH:MM:ss") + " 重新啟動,耗時:" + ($End_Time - $Begin_Time).TotalSeconds + "秒" + "`r`n" + "`t" + "原因:服務狀態為Stopped." + " `r`n`r`n" + "`t" + "Your Watch Dog"
  ## 寄送郵件
  Send-MailMessage -to $MailTo  -From $MailFrom -Subject $MailSubject -Body $MailBody -SmtpServer $SMTPServer -Encoding UTF8 -Priority High
  }
}