「PowerShell」人人都值得學一點PowerShell實現自動化(4)

經過上篇的簡單示例,給大家領略了PowerShell的威力,做同樣的事情,比起其他語言來,更容易實現,幾乎就是需要做什麼就一個命令完成。

但通常一些複雜的操作,在原生的功能上沒提供,此時就需要到社區裡找現成的輪子來用,本篇給大家送上幾個新發現的不錯的輪子,讓我們的工作更加輕鬆,自在。

聽多了python的好,經PowerShell一比就不算什麼

相信在數據圈子裡,或多或少都聽到過python的一些宣傳,同一個功能C寫100行代碼,python10行代碼搞定。

這次好了,在PowerShell裡,只需1行代碼就完事,誰優誰劣,有對比就有結果。在PowerShell的輪子世界裡,也是同樣地追求這種1行代碼解決問題的快感。

PowerShell輪子在哪裡?

和dotNET的輪子庫nuget一樣,PowerShell一樣有一個官方的輪子庫powershellgallery。火熱程度不及nuget,但其實從廣義來說,nuget的輪子,都可以用到PowerShell上來,因為都是同樣的dotNET庫,PowerShell支持使用dotNET類庫,只是有些麻煩,筆者也沒興趣太多研究,坐等powershellgallery慢慢繁榮起來即可。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


如何安裝PowerShell輪子

PowerShell的輪子叫模塊,一句命令就可以安裝了。按關鍵字找到自己需要安裝的輪子,把名字記下來,就可以在PowerShell上輸入Install-Module -Name 模塊名進行安裝。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


當然,如果不想用瀏覽器,直接在PowerShell上用Find-Module一樣可以查看到。不過信息量沒有網頁查看地詳細。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


安裝過程中,可能有些小意外,不要慌,一般來說,用管理員權限打開PowerShell更為合理,如果自己寫腳本給自己用的話。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


查看輪子有哪些的功能

作為一個搞數據的人,哪裡都離不開Excel,本篇也重點給大家介紹一個不錯的Excel輪子,其底層也是用了dotNET的EPPLUS輪子作封裝的,讓PowerShell上與Excel交互更方便,並且性能得到保證,用的是openxml方式而不是依賴OFFICE環境的COM接口方式。

查看ImportExcel輪子有哪些功能,相對去網頁上看,還不如直接在PowerShell的幫助上看,更方便,有時作者也只是維護了PowerShell裡的幫助文檔,反而在網頁上沒多少文檔信息,這就是PowerShell奇特之處,用中學,自帶幫助。

一般來說,只要我們導入過模塊之後,右邊的幫助系統裡,就可以找到模塊的幫助信息,如果沒有,就重新用Import-Module導入一下。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


隨便找一句命令來試試手,Send-SQLDataToExcel,將數據庫數據導出到Excel中來,數據庫不限於Sqlserver,ACCESS、Excel也可以當數據庫訪問。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


Send-SQLDataToExcel -MsSQLserver -Connection localhost -SQL "select name,type,type_desc from [master].[sys].[all_objects]" -Path F:\\自媒體相關\\其他文章分享\\powershell\\輪子\\temp.xlsx -WorkSheetname master -AutoSize -FreezeTopRow -AutoFilter -BoldTopRow

就一句命令,按照人想什麼,它就幫我們做成了什麼,只要按格式把一些要求的參數填上,參數填得越詳細,出來的結果越符合自己的期望。

如示例中展示的-AutoSize -FreezeTopRow -AutoFilter -BoldTopRow,只要會英文單詞,都可以知道里面是什麼意思了。

比起等現成工具給我們做界面,開放各種參數,不如自己會一點點小腳本,自己靈活配置來得舒服。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


ImportExcel的許多寶藏等著挖掘

相對於像Excel催化劑那樣的插件實現,自己把這個Excel輪子研究一下,可能出來的結果更合自己的口味,此輪子有大量的示例文件供學習,在github上可以找到,或者不想找,後臺回覆【ImportExcel】給大家發送。

忍不住給大家再展示一條命令,Excel催化劑未有實現的文件對比功能,兩個工作表的數據差異對比,提供參照列,對比列的參數即可完成。最終結果如下:橙色是不同,綠色是新增,粉色是刪除。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


按對應的參數填寫好,複製一下就完事,當然在作者的示例文檔裡直接複製更容易。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


Merge-Worksheet -Referencefile "$env:temp\\server1.xlsx" -Differencefile "$env:temp\\Server2.xlsx" -OutputFile "$env:temp\\combined1.xlsx" -Property name,displayname,startType -Key name -Show

數據庫寫入數據利器Write-ObjectToSQL

除了玩Excel外,數據庫也是必玩的,所以也順便介紹一個剛發現的不錯的輪子Write-ObjectToSQL,將任何對象上傳到Sqlserver中,如我們讀入一個Excel文件,就可以把這個文件數據上傳到Sqlserver上,無需提前建表。或者在運行過程中生成的不同的對象集合,一樣可以上傳。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


按實際需要填寫好參數。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


Import-Excel -Path F:\\自媒體相關\\其他文章分享\\powershell\\輪子\\combined.xlsx|Write-ObjectToSQL -Database Test -Server localhost -TableName TestTable

就這麼簡單,一句命令,就可以將Excel表數據上傳到Sqlserver上。,並且代碼也是接近人的語言,用界面填寫下參數就完成了,門檻足夠低。


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


「PowerShell」人人都值得學一點PowerShell實現自動化(4)


結語

如今任何一門語言都是有大量的現成輪子存在可供使用,PowerShell的輪子也真不少,算上其微軟自身產品Windows、Sqlserver、ExChange、OFFICE等等大量的現成cmdlets命令,再外加社區的輪子,有能力的話,還可以把dotNET社區裡的輪子也一併使用起來,是不是非常爽了呢。

簡單入門一下語法,又可以打開一扇大門,從中得到廣闊的世界,這就是輪子消費者的境界。

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


分享到:


相關文章: