話說詮力新版的簡訊發送平台提供了Web API功能,使用者可申請帳號後,依照API的規格文件開發,即可替自己的系統增加透過API發簡訊的功能。因本文章的主題並不是介紹該API,故僅就使用到的基本參數做介紹,就不詳述如何呼叫該API了。
首先,請使用Http POST Method,呼叫簡訊發送平台的Url,並帶入下列參數,若順利呼叫成功,回傳內容會取得一個Json物件,其中ErrorCode的值若為0,即表示已成功將發送簡訊的需求送至簡訊平台。
Web API傳入參數
Web API回傳內容
接著進入本文主題,利用Windows系統中內建強大的PowerShell功能,就可以輕鬆做到不用寫程式,也不用安裝程式,就能做到監控Windows系統,有異常時自動發送簡訊。
1.打開Windows的事件檢視器,選取一個要監控的事件,本文選擇了IIS Start的事件:
2.撰寫Powershell的批次檔(.ps1檔),並放在想要存放的路徑,本文中的批次檔路徑為D:\final.ps1 (註:可先以記事本編輯好內容,再修改副檔名為ps1)
for ($i = 0; $i -lt $Args.Count;)
{
$msg += $Args[$i] + " "
$i++
}
Add-Type -AssemblyName System.Web
$EncodeMsg = [System.Web.HttpUtility]::UrlEncode($msg)
$postParams = "UID=簡訊系統平台帳號&PWD=Base64編碼後的密碼&DA=09XXXOOOVV&SM=" + $EncodeMsg
$response = Invoke-RestMethod -Uri http://簡訊系統平台Url/Sms/SendSms -Method POST -Body $postParams
$response.ErrorCode
本批次檔的說明如下:
Line 1~Line 5:將接收到的參數組合起來做為簡訊內容
Line 6~Line 7:將簡訊內容做urlencode,免得收到簡訊時是亂碼
Line 8:組合Web API的傳入參數
Line 9:呼叫http的POST method,並將Web API的回應內容存入變數response
Line 10:輸出ErrorCode檢查簡訊發送是否成功
3.回到事件檢視器選取監控的事件上,點選『附加工作到此事件…』
4.輸入監控項目的名稱,並選擇下一步
5.選擇『啟動程式』,及下一步
6.『程式或指令碼』輸入powershell,『新增引數』則輸入下列文字。
-ExecutionPolicy UnRestricted -command "D:\final.ps1" "IISrestart" "事件被觸發"
(註:-ExecutionPolicy的參數說明是因powershell有安全性原則要遵守才能執行,詳細參數值請見參考資料1;-command則是輸入powershell指令檔的檔案路徑;後面剩下的參數則是當成給指令檔的參數,用來組出簡訊內容)
7.勾選『當我按完成時開啟這項工作的內容對話方塊』,並按下完成
8.勾選『不論使用者登入與否均執行』,以及『以最高權限執行』
9.輸入有本機系統管理員權限的帳號與密碼進行新增此設定的確認
10.系統會跳出設定成功的確認畫面
11.進入工作排程器,重新整理『事件檢視器工作』,可看到上述步驟新增後的監控設定
12.現在要模擬IIS start的事件,先以系統管理員身份開啟命令提示字元
13.輸入iisreset後,可在事件檢視器看到如步驟1.的事件3201
14.同時可收到簡訊如下圖
15.至此,已達到監控系統並適時發出簡訊告警的目的。
後續還有許多可延伸的調整包括取得事件檢視器的參數值來組出簡訊內容,例如電腦名稱、事件ID、事件名稱等,請見參考資料2。
參考資料:
1 | http://mydiamond.pixnet.net/blog/post/60187969-初學-powershell | Powershell有一些控管安全性的執行原則要注意 |
2 | http://lunarforest.blogspot.com/2014/06/windows.html | 如何取得事件檢視器的參數名稱 |
3 | https://www.sapien.com/blog/2015/11/30/passing-parameters-to-a-script-in-an-executable-file/ | 如何傳遞變數給ps檔 |