您好,登錄后才能下訂單哦!
昨天在MVA上看PowerShell5的最新功能的合集視頻,第一個演講人是微軟PowerShell 開發組的經理,他提到了DevOp 的發展趨勢,他認為對于PowerShell而言,除了基本的PowerShell的技能,還需要掌握以下基本的技能和工具:
PowerShell DSC
版本控制 Git & Github
腳本最佳優化 Script Analyzer
單元測試 Pester
PowerShell DSC和Github 豆子倒是用過,后面兩個是什么呢?
首先看看Script Analyzer,這個東東預定義了一堆policy,用來掃描你的腳本是否滿足最佳實踐,比如參數的位置啊,別名啊,明文密碼等等。
安裝很簡單,如果已經安裝了psget的模塊,可以直接下載安裝,然后激活即可,豆子用的win10,自己已經安裝了因此可以直接下載
PS C:\> Install-Module -name psscriptanalyzer PS C:\> Enable-ScriptAnalyzer
可以在ISE 的Add-On看見多出來的選項,勾選之后出現一個新的窗口
隨便打開一個腳本文件掃描一下 就能看見一堆警告,比如下面的警告因為我用了大量的別名而不是全稱
順便提一下和這個一起常見的的插件 Script Browser, 安裝方式很類似
PS C:\> Install-Module -name scriptbrowser PS C:\> Enable-ScriptBrowser
這個script browser的功能允許我們直接在微軟的腳本中心里面搜索自己需要的腳本,比如我輸入cpu,那么相關的腳本自動就出來了
最后來看看什么是 Pester。
Pester 是基于TDD方式的單元測試框架。TDD(Test-Driven Development)的意思是我們想實現某個功能,我們先寫一個測試的代碼出來,然后執行他會報錯,因為真正的功能代碼我們還沒實現;然后我們再根據我們預先寫好的測試代碼,倒過來去寫功能以便他能通過測試。當測試功能都通過的時候 我們認為這個開發的功能就實現了。
首先下載模塊,這個可以從github或者powershell gallery下載, 目前的版本是3.4
PS C:\> import-module pester -force
看看這個模塊有哪些命令,功能很多,這里作為入門演示,我們只用的上幾個最基本的。
PS C:\> Get-Command -Module pester CommandType Name Version Source ----------- ---- ------- ------ Function AfterAll 3.4.0 pester Function AfterEach 3.4.0 pester Function Assert-MockCalled 3.4.0 pester Function Assert-VerifiableMocks 3.4.0 pester Function BeforeAll 3.4.0 pester Function BeforeEach 3.4.0 pester Function Context 3.4.0 pester Function Describe 3.4.0 pester Function Get-MockDynamicParameters 3.4.0 pester Function Get-TestDriveItem 3.4.0 pester Function In 3.4.0 pester Function InModuleScope 3.4.0 pester Function Invoke-Mock 3.4.0 pester Function Invoke-Pester 3.4.0 pester Function It 3.4.0 pester Function Mock 3.4.0 pester Function New-Fixture 3.4.0 pester Function New-PesterOption 3.4.0 pester Function SafeGetCommand 3.4.0 pester Function Set-DynamicParameterVariables 3.4.0 pester Function Set-TestInconclusive 3.4.0 pester Function Setup 3.4.0 pester Function Should 3.4.0 pester
現在來看個實際的例子,比如說我想寫一個function來測試能否ping通一個計算機。按照TDD的邏輯,我實現這個功能之前,先把他的測試代碼寫出來。
首先學習第一個命令是new-fixture,指定一個目錄和function的名字,他會自動創建一個目錄,并且在這個目錄下創建兩個文件出來。第一個文件是我需要實現功能的腳本文件;第二個是這個功能腳本對應的測試文件。后者在前面的名字后自動加了一個tests的后綴
PS C:\temp\tester> New-Fixture -Path PingHostExample -Name pinghost Directory: C:\temp\tester\PingHostExample Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 15/06/2016 2:11 PM 29 pinghost.ps1 -a---- 15/06/2016 2:11 PM 261 pinghost.Tests.ps1
psedit 直接在ISE里面打開看看自動生成的內容
PS C:\temp\tester> psEdit .\PingHostExample\pinghost.ps1 PS C:\temp\tester> psEdit .\PingHostExample\pinghost.Tests.ps1
第一個是空的
第二個自動生成一個測試的模板;注意前兩行的作用是獲取當前目錄,然后獲取第一個腳本的名字,然后dot source 導入到內存里面。
Describe的意思這一組測試的名字是啥; It代表的每一個單獨的測試,后面跟了個名字, 大括號里面有個管道,管道前面是要執行的操作;后面是理論上應該出現的結果;他們會進行匹配,如果失敗,就會報錯。
現在來執行一下試試看, invoke-Pester這個命令會自動的在當前目錄和子目錄下尋找執行 test.ps1命名的腳本,當然也可以指定某個目錄搜索
結果報錯。這是正常的,因為pinghost.ps1里面現在是空的。 可以看見報錯命令是返回結果是true,而我們定義的測試文件期望返回值為false 所以報錯
現在修改一下我的腳本
function pinghost { param( [string]$computername=$env:COMPUTERNAME ) Test-Connection -ComputerName $computername -Quiet -Count 1 }
測試腳本
Describe "pinghost" { It "Ping Localhost" { pinghost | Should Be $true } It "Ping DC" { pinghost -computername (get-addomaincontroller).hostname | Should be $true } It "Not Exist"{ pinghost -computername "XXX" | Should be $false } }
執行看看,成功
Pester有很多function,上面的例子僅僅介紹了最簡單的幾個。接下來博客豆子會進一步說明其他function。
PowerShell的開發和使用是微軟系統未來的方向,比如最新的windows 2016 nano server就完全摒棄了本地登錄和圖形界面,只能通過powershell進行遠程配置。現在看來,掌握了基本的PowerShell 完全不夠,未來需要學習的東西還有很多。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。