首頁 > 科技 > 正文

人人都值得學一點PowerShell實現自動化(6)自動化微軟系產品


更新日期:2019-10-12 21:41:55來源:網絡點擊:1492405
國旗,國星光電,國有企業改革,煎茶,煎藥器,煎蛋網

追過筆者前面系列的文章都知道,越到后面,越是高潮,本篇給大家帶來PowerShell和微軟系產品的交互,自動化日常工作的必備神器,盡在PowerShell上。

PowerShell之所以強大,在于其是面向對象的語言

在DOS命令和CMD命令中,都是一條命令執行一個過程,是面向過程的調用方式,而PowerShell之所以敢稱作Power,就是其比一般地Shell不同之處是,其可以調用整個dotNET的類型庫,可以用面向對象的方式去訪問和執行復雜的對象模型如Sqlserver的SMO、AMO模型和各種COM模型如OFFICE對象模型等。

所以PowerShell之所以Power,真是沒夸大成份,實在是很Power。

調用Sqlserver對象模型

在之前推薦過的兩本書中,有一本就是專門講使用PowerShell做Sqlserver的自動化運維操作。里面全書都是很實用的實例,很有現實的使用場景。

在實現自動化過程的前提,需要對本身Sqlserver的功能有足夠熟悉才能發揮其作用,就如使用OFFICE軟件一樣,如果對OFFICE軟件的自身的功能、界面的操作都不熟悉,其實使用VBA來自動化,也產生不了多少價值。

非常有實戰意義的例子-備份數據庫存元數據

無論是系統開發人員還是數據分析工作者,其實對數據庫的知識都是比較有限的,沒法像專業數據庫運維人員那樣熟悉各種數據庫的運維、防災等操作。

不專業時,雖說一般不會出現什么災難性的問題,但日常一些失誤引起的小范圍的損失是在所難免的。

例如筆者之前經常吃虧在寫Sql視圖、存儲過程時,當某些時候需要修正一下邏輯,就容易沒太在意,在原來基礎上直接通過Alter語句來改寫,有時不小心,邏輯改錯了,又已經執行了Alter命令,最終之前寫過的邏輯就被覆蓋了。

然后就只能自己擦干眼淚重新來一遍,有時幾天的活就這樣沒有了,甚至修改太久遠的邏輯時,都不記得怎樣還原回以前的邏輯。

日常做的一些備份,一般來說是指備份整個數據庫,如果為了一個小步驟的錯誤,而動用大運作去還原數據庫,這個過程也是不少的工作量,也不確定生產環境是否允許我們動不動就停機來還原數據庫(說實話,自己也沒在生產環境下還原過數據庫,只是一些測試庫自己練習玩玩而已,真心不是專業DBA)。

從上面的場景來說,其實我們想要的一個效果更多地是還原元數據即可,如果有備份好元數據,我們重新從元數據里找過去寫過的視圖、存儲過程,然后拿過來重新還原,成本更低。

關鍵點在于:如何方便地備份元數據,更精確地說自動化備份元數據?

這個問題一直想做,一直耽擱著,直到寫這系列的文章,終于鼓起勇氣去探索一翻,算是找到了不錯的方式,在此也給廣大讀者無償分享,相信大家太多機會可以用得上。

手動實現方法-通過生成腳本任務來完成

上面說過,起碼我們是懂得用界面、原生功能實現,才比較好理解如何用自動化實現,在SSMS上,我們可以通過【生成腳本】任務,實現數據庫的元數據備份,具體操作見下圖:



來到下一個界面,要以選擇我們特定的對象,或整個數據庫對象,具體哪些對象見下圖:



再下一步就是保存方式而已,非常好理解,可見微軟系的產品的體驗非常棒,不止是操作步驟少,而且完全是界面化操作。



自動化備份數據元數據的方式,就是調用這個生成腳本的任務,讓它每天都給我們備份出一個文件來即可。每天備份的頻率,已經可以把我們的損失減少到一天內的工作。

自動化備份方式

想要自動化實現,就需要寫代碼,具體用什么語言來寫,就看哪種語言可以調用Sqlserer的SMO對象了,筆者對微軟系以外的語言是否支持不太知識,微軟系內,dotNET語言是可以完成支持的,當然像VB這種古老語言就沒份了,所以我們使用VB.NET、C#、PowerShell,都可以完成對SMO對象的訪問實現自動化操作Sqlserver。

在此篇文章的代碼中,分別分享C#和PowerShell的代碼,筆者的書寫順序是先寫了C#代碼,再寫PowerShell代碼,在調用dotNET類庫上,PowerShell因為沒有命名空間的概念,書寫代碼沒有C#那么方便,但因總體代碼量較少,寫完C#再寫PowerShell時,可以很方便地將C#智能提示出來的代碼,直接復制到PowerShell上小改即可。

C#代碼如下:順帶寫了自動刪除過去60天外的腳本文件,防止備份數量過多。



關鍵的SMO對象是Transfer對象,同時如果遠程訪問其他服務器時,不能簡單localhost用Windows認證登錄那么省事,用Sqlserver認證體系時,需要構造ServerConnection對象。

使用PowerShell的腳本如下:基本上按C#寫出來的代碼,按PowerShell語法改寫一下即可,PowerShell直接寫,很多沒有智能提示,比較蛋痛。



一個小坑,不知道什么原因,使用PowerShell備份Azure SQL時報錯,最終項目真實環境是用了C#生成的控制臺程序,沒有使用PowerShell腳本。有可能某些真實環境控制臺程序訪問權限問題受限,不得不使用PowerShell腳本,所以還是很有必要學習使用PowerShell的方式實現一下。

簡單帶過一下PowerShell自動化OFFICE程序

和VSTO開發類似,只要拿到OFFICE程序的Application對象后,就可以輕松例用VBA的對象模型,進行OFFICE的自動化操作。



同樣道理,最佳的方式是先寫好了VBA再轉換為PowerShell代碼,在PowerShell上直接寫,沒有智能提示,非常糟糕。

當然還可以調用其他dll程序集

調用其他dotNET類庫,使用Add-Type方法,具體可參考幫助文檔,這些的應用場景暫時沒想到太經典的,畢竟在dotNET體系里,可能并非使用PowerShell完成一切工作最佳,相反,可能更多時候是C#代碼里調用PowerShell為主,畢竟PowerShell的定位也只是一些自動化腳本,小型的需求使用。



結語

本篇帶給大家一些PowerShell能夠做什么的視野性擴展,當然它能夠做什么時如果有更佳的方式來完成,也并非完全需要硬套PowerShell來完成。

對于非專業程序員來說,更多地是入門一門語言,然后盡可能將其精華部分發揮出來即可。例如本篇提及的對Sqlserver運維的自動化,就是一個不錯的場景。

筆者未來聚焦在數據領域的分享,不限于Excel,會分享更多Sqlserver、dotNET、Azure、PowerBI等話題,升級數據分析的能力,歡迎繼續關注。*


相關:

連失銷冠寶座被曝變相裁員 上汽大眾駛入“艱難時刻”外匯天眼APP訊 : 全球車市“陰云密布”的當下,傳統燃油車銷量受到沖擊,一些汽車廠商不得不通過裁員、降薪等方式減少壓力,就連上汽大眾這樣的“龍頭”企業也被卷入此類傳聞中。日前,有曝出,上汽大眾將內部員..

談民強:汽車核心技術已在手里 還擔心什么經濟觀察網 記者 干群芳成立于1969年的東風汽車是中國家喻戶曉的中國“二汽”,到今年已經走過50年的征程。在過去50年時間中,東風汽車經歷了從軍車到商用車再到乘用車,從自主制造到與外資車企合資建廠再到入股..

又有4家公司退出Libra 包括Visa、萬事達繼PayPal宣布退出Libra加密貨幣項目后,eBay、Visa、萬事達(Mastercard)和Stripe等四家公司于本周五也宣布,將退出Facebook主導的Libra項目。聲明中,這些公司表示,他們尊重并看到了這個項目的潛力,但選擇把重..

相關熱詞搜索:國旗,國星光電,國有企業改革,煎茶,煎藥器,煎蛋網

上一篇: 美國芯片大廠德州儀器炒掉分銷商,國產芯片或可“撿漏”
下一篇: 華為研發中心已在上海金澤鎮全面施工,總投資20億元

甘肃快三开奖号码