上次寫過一篇用SQL檢查系統時間是否正確您有監控SQL Server系統時間是否正確嗎 ? 該相信GETDATE()得到的資料嗎?
但由於該語法只能在SQL2008以上版本執行,因此為了SQL2005及SQL2000的Server也能被定期監控系統時間是否正確,我也透過Powershell來撰寫相關功能。
下面這簡易的Powershell可利用Windows的工作排程器佈署在Server上,定時檢查比對一下時間是否異常
$sys=Get-WmiObject win32_operatingsystem
#取得系統運行時間
$per=Get-Counter -Counter "\System\System Up Time"
$t1=$per.CounterSamples | Select CookedValue
$UpTime=New-TimeSpan -Seconds ([convert]::ToInt32($t1.CookedValue))
#取得目前系統時間
$LocalDateTime=$sys.ConvertToDateTime($sys.LocalDateTime)
#取得系統開機時間
$LastBootUpTime=$sys.ConvertToDateTime($sys.LastBootUpTime)
#利用[目前系統時間]-[系統開機時間]-[系統運行時間]算出時間差
$TimeSpan=[math]::Abs(($LocalDateTime-$LastBootUpTime).TotalSeconds-$UpTime.TotalSeconds)
#時間差超過3600秒(一小時)就發MAIL告警一下
if($TimeSpan -gt 3600)
{
$smtp = New-Object Net.Mail.SmtpClient("mail.com.tw")
$smtp.Send($sys.CSName+"<dba@mail.com.tw>","dba@mail.com.tw",$sys.CSName+" System Time Suspect","Time difference:"+$TimeSpan)
}
我是ROCK
rockchang@mails.fju.edu.tw