[Powershell]利用Powershell定期檢查OS的系統時間是否正常

上次寫過一篇用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