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

本系列說是人人都值得學PowerShell,也是因為其簡單,無需高深的編程知識即可開始上手,幾句代碼就可以完成很多日常要重複性工作,本篇給大家展示下PowerShell的易上手,以幾個小例子一同來感受一翻。

學習PowerShell最不怕學習資料少

相對Excel用戶群體有錄製宏的方式來學習VBA,在PowerShell的學習上,其實也是非常容易的,有時甚至比學習VBA更簡單,在入門的角度來看。

雖然PowerShell貌似很冷門,少有資料學習,但也不妨礙一般的職場人士來學習它。最豐富的學習資料就是其內置的幫助文檔。一般來說,只要我們善於使用幫助文檔,可以解決我們大部分的學習問題,特別是入門級的簡單應用。

在使用PowerShell的過程中,我們更多隻需要關心我們要做什麼,然後最好能夠想到相應的英文關鍵字,可以通過關鍵字搜索出相應的命令來,然後就可以查找其內置的幫助文檔,連搜索引擎都不需要(翻譯軟件倒是需要的,因為幫助文件很不幸地是英文版的)。

查看命令的詳細用法


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


幫助文檔寫得非常詳細,可以跳過其參數說明,直接看最下方的示例。


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


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


案例1:遍歷文件夾示例

雖然說PowerShell是一個要編寫代碼的方式交互的腳本語言,沒有像其他工具那樣方便直接界面完成,但腳本語言有其好處是靈活處理,懂使用後,靈活度高出許多。

像文件類的日常場景非常多,雖然Excel催化劑插件已經幾乎將有使用場景的功能都囊括了並且也將使用體驗做到極致,但作為練習場景,還是不錯的。

為了最大程度地減少手動寫代碼的數量,我們可以儘量使用命令輔助界面來操作。

有一點點DOS或CMD命令行使用經驗的人群,一般都很有使用過dir命令,這個命令就是列出當前文件夾下的文件和文件夾清單。


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


不懂也沒關係,只是需要現在記住一下就可以。

在PowerShell中,我們一樣可以使用dir這樣的命令,但我們為了查看到其標準的命令,使用了一個Get-Alias的命令,將dir的標準命令找出來,PowerShell可以使用dir這樣的別名的方式來簡寫命令或讓cmd或linux用戶快速熟悉,所以我們找到其真正的標準名稱是Get-ChildItem。

記住標準名稱的成本其實更低,因PowerShell已經使用了有意義的名稱,而非一些簡寫、縮寫,非英語環境的人難以記住的名稱,使用完整名稱更好記。


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


接下來,把完整的命令,複製到右側的命令窗格中去查找命令的輸入參數,不熟悉的還可以按上文一樣查找一下幫助文檔及其示例簡單學習下。


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


可以點擊運行、插入、複製等按鈕,具體對應的情形可以自行測試下,現在選擇【複製】按鈕,往腳本編輯區粘貼一下。將看到我們已經通過界面生成了以下的代碼命令。遍歷指定的Path路徑,並且遞歸遍歷子文件夾。這樣的命令就可以運行起來。

 Get-ChildItem -Path F:\\自媒體相關\\其他文章分享\\powershell\\文件夾遍歷 -Recurse

可以按【運行選擇】將當前選擇狀態下的代碼運行。同樣可以上面一步不用複製直接用【運行】或【插入】按鈕。


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


最後遍歷的所有文件、文件夾清單就出來了,一條命令執行一件事情,PowerShell就是這麼簡單。


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


當然只在控制檯窗口中顯示,沒有太大意義,我們更想把結果存在文件裡如Excel裡可以打開,此時可以存在csv文件裡,後面再介紹如何存到Excel文件中。

同樣地使用命令窗格,輸入csv關鍵字,可以查看到有一個【Export-Csv】命令是我們想要的導出命令。


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


同樣道理,我們使用界面生成一條導出命令


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


命令的代碼如下:

 Export-Csv -Encoding Default -Force -LiteralPath F:\\自媒體相關\\其他文章分享\\powershell\\childItems.csv

最後我們用PowerShell管道將Get-ChildItem和Export-Csv串起來,管道就是一個豎線符號,代表前面的結果直接輸送到後面使用,即前面生成的文件、文件夾信息,流到後面輸出csv命令使用,代碼如下:

Get-ChildItem -Path F:\\自媒體相關\\其他文章分享\\powershell\\文件夾遍歷 -Recurse | Export-Csv -Encoding Default -Force -LiteralPath "F:\\自媒體相關\\其他文章分享\\powershell\\childItems.csv"

然後就生成了一個csv文件,裡面存有我們Get-ChildItem遍歷所有文件、文件夾項目命令生成的結果清單。兩個命令,就可以做這麼多的事情,現在可以感受到PowerShell的簡單便捷了吧。


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


案例2:批量創建Windows用戶

經過案例1的學習,已經領略到右側命令窗體創建PowerShell命令的便捷性,此處不再重複截圖,直接寫代碼。

以下代碼用test作佔位符,演示New-LocalUser命令的關鍵參數。有了這個命令,就可以創建我們的用戶了,需要注意一點的是Password參數有點特殊,需要將密碼字符用另外一條命令作一下轉換。

New-LocalUser -Name test -Password test -Description test -FullName test -PasswordNeverExpires

如果只是創建一個用戶,使用Windows界面操作可能更快,如果創建100個用戶呢,毫無疑問,是我們用PowerShell的代碼來創建最快,我們可以在Excel上用公式生成一批用戶命令,批量執行多條命令實現批量操作。

懂Excel字符串拼接函數就可以做出以下的多條命令來。此種方式甚至不需要學會編程語言中的循環結構的使用,利用Excel的函數向下填充功能,就可以做到我們編程中的循環操作的結果。


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


此處,快速給大家演示如果使用PowerShell的編程方法,應該如何去做,直接貼代碼如下:

$csv=Import-Csv -Encoding UTF8 -Path F:\\自媒體相關\\其他文章分享\\powershell\\創建用戶\\創建用戶.csv
$csv|ForEach-Object {
$pwd=ConvertTo-SecureString -String $_.Password -AsPlainText -Force
New-LocalUser -Name $_.Name -Password $pwd -Description $_.Description -FullName $_.FullName -PasswordNeverExpires
}

以上代碼涉及到PowerShell語言中的變量定義、循環結構等知識點,有興趣的朋友可以將PowerShell的語法學習一下,就很好理解了。

先讀取csv,再用管道將讀取到的內容供下一步遍歷使用,因密碼參數需要用密碼格式,用了一個ConvertTo-SecureString作轉換,最後還是調用New-LocalUser創建用戶,整個過程非常簡煉,一條命令做一件事情,相比其他語言來完成同樣的操作,代碼量就多出許多。

最後,我們用Get-LocalUser,可以查看到我們的創建是成功的。


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


當然有創建,就有刪除,我們用Remove-LocalUser來刪除用戶,同樣使用管道的方式,將Get-LocalUser得到的用戶清單,通過Where作篩選後,傳給Remove-LocalUser刪除。

Get-LocalUser | Where-Object Name -Like "test*"|Remove-LocalUser

結語

本篇以兩個簡單例子,給大家演示了PowerShell的易學易用,若靜下心來學習一下語法,使用現成的大量PowerShell命令,已經可以幫我們完成非常多的工作,再結合社區裡大牛們寫的一些輪子,我們在使用PowerShell的過程也將變得更加輕鬆。

作為一個數據化時代,對辦公人員的要求越來越高,非專業碼農入手一門編程語言,可以在許多場景上都可以不求於人實現很多自動化操作,PowerShell是一個不錯的選擇,良心推薦。

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


分享到:


相關文章: