Powershell 是運行在windows機器上實現系統和應用程序管理自動化的命令行腳本環境。你能夠把它當作是命令行提示符cmd.exe的擴充,不對,應當是顛覆。 powershell須要.NET環境的支持,同時支持.NET對象。微軟之因此將Powershell 定位爲Power,並非誇大其詞,由於它徹底支持對象,面向對象的便捷可想而知了。其可讀性,易用性都很是的完美。python
在運維windows 服務器的時候,其做用是很是大的。簡潔高效等等。這裏我簡單用一個我應用的地方來展現一下。sql
有時候咱們須要監視來自特定用戶電腦對於數據庫的鏈接。好比該用戶說,他偶爾會斷開鏈接或者有時鏈接某個程序時出現問題,而數據庫就是個人數據庫。這個問題一開始真的很讓我着急(FUCK),由於問題不是常常可以重現難以追蹤。即便重現了錯誤,可能提供的信息也不夠完整。shell
爲了幫助實現對此類問題的troubleshoot ,我編寫了兩個PowerShell 腳本。腳本可以能夠無人值守,而且日誌在一段時間後查詢。我打算在用戶的PC上運行這個腳本,而且該PC在不一樣的網絡或者不一樣的子網。也能夠在同一時間在SQLServer服務器運行腳本。會產生三個不一樣的日誌文件,而後進行比較。這些腳本是對於cpu使用和負載佔用不多的輕量級程序。可是必需要謹慎使用運行的查詢,儘可能針對一些小的表進行查詢等,好比select count(*)from 小表。數據庫
基本上全部這些腳本主要實現是:鏈接SQLServer而且執行查詢。循環執行查詢知道手動終止它。假若有錯誤重現了,就會記錄日誌到日誌文件而後再次鏈接->執行查詢。小程序
OpenConnQueryCloseConn.ps1 - 這個腳本做用就是打開鏈接數據庫實例,運行sql指令,而後關閉鏈接。這個處理將會一次又一次的重複直到你手動關閉它。windows
OpenConnLoopQuery_Long.ps1 - 第二個腳本的功能就是打開鏈接,讓它保持打開而後重複執行查詢腳本,直到你手動終止循環纔會中斷循環關閉鏈接。服務器
圖1 最大區別在於循環位置網絡
兩個腳本都會在終端和日誌記錄日誌。若是鏈接產生問題咱們也但願在日誌文件中看到錯誤信息。當錯誤信息只在一個日誌文件中,那麼有時就能引導咱們發現網絡或者特定的某種錯誤。運維
首先咱們來看一下OpenConnQueryCloseConn.ps1這個腳本。這個腳本一開始先設定鏈接參數。確保下面的參數是可用的參數。函數
21-27行就是咱們的鏈接參數和查詢命令變量 。
圖2 主要的參數變量
$serverName="服務器名稱" $databaseName="數據庫名稱" $uid="User ID" $pwd="user Password " $sqlCommand="命令語句-好比查詢一個小表的行數" $logLoaction="記錄日誌文件的位置. --- c:\ps\OpenConnQueryCloseConn.log"
腳本的底部就是循環的主要部分。
圖3 循環部分
fn_HitSQL 函數大部分工做已經完成了。打開數據庫鏈接而後不斷去執行查詢。有不少地方主要的工做就是日誌記錄。以下:
圖4 日誌記錄部分
還有一個函數去記錄鏈接和錯誤。函數fn_WriteToLog 將錯誤信息附加上日期後記錄到終端而後添加到日誌文件中。
作好了以上全部工做後,執行腳本,當法傷網絡鏈接問題時,就會產生日誌文件錯誤日誌。以下:
錯誤日誌信息
第二個腳(OpenConnLoopQuery_Long.ps1 )本基本上與第一個同樣如圖1 中所示同樣就是在執行語句後面緊跟着一個循環語句這樣避免了關閉鏈接。在一個鏈接中不斷重複語句。這裏也就不仔細講解了。
運行兩個腳本須要執行powershell 腳本,指令以下,固然也能夠本身拼寫:
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnLoopQuery_Long.ps1
PowerShell.exe -ExecutionPolicy Bypass -File C:\PS\OpenConnQueryCloseConn.ps1
須要注意的是要提早設定好路徑「C:\PS」
沒找到如何上傳腳本...,有哪位大神能夠告知。具體腳本可向我詢問留言便可。發郵箱
謝謝博友提供方式。
下載地址:
http://files.cnblogs.com/files/wenBlog/OpenConnLoopQuery_Long.zip
http://files.cnblogs.com/files/wenBlog/OpenConnQueryCloseConn.zip
本篇主要介紹了本身開發的一個利用powershell來實現的循環監測鏈接出現網絡異常的腳本。本質上就是循環鏈接查詢數據庫,記錄鏈接失敗或者查詢失敗的信息。以前經過C#和其餘開發工具也都實現過不管是windowsService 仍是其餘小程序。可是感受powershell開發起來更簡單,對機器性能影響更小,固然python也是同樣的道理。之因此選擇使用powershell主要是學習響應的語法便於未來運維windows服務器。愈來愈發現PowerShell的強大,與高手相比還有很大空間要去學習。