溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PowerShell Script Analyzer, Script browser 和 Pester

發(fā)布時間:2020-06-11 10:40:00 來源:網(wǎng)絡(luò) 閱讀:3177 作者:beanxyz 欄目:開發(fā)技術(shù)

昨天在MVA上看PowerShell5的最新功能的合集視頻,第一個演講人是微軟PowerShell 開發(fā)組的經(jīng)理,他提到了DevOp 的發(fā)展趨勢,他認(rèn)為對于PowerShell而言,除了基本的PowerShell的技能,還需要掌握以下基本的技能和工具:


  • PowerShell DSC

  • 版本控制 Git & Github

  • 腳本最佳優(yōu)化 Script Analyzer

  • 單元測試 Pester



PowerShell DSC和Github 豆子倒是用過,后面兩個是什么呢?


首先看看Script Analyzer,這個東東預(yù)定義了一堆policy,用來掃描你的腳本是否滿足最佳實(shí)踐,比如參數(shù)的位置啊,別名啊,明文密碼等等。


安裝很簡單,如果已經(jīng)安裝了psget的模塊,可以直接下載安裝,然后激活即可,豆子用的win10,自己已經(jīng)安裝了因此可以直接下載


PS C:\> Install-Module -name psscriptanalyzer
PS C:\> Enable-ScriptAnalyzer


可以在ISE 的Add-On看見多出來的選項(xiàng),勾選之后出現(xiàn)一個新的窗口

PowerShell Script Analyzer, Script browser 和 Pester


隨便打開一個腳本文件掃描一下 就能看見一堆警告,比如下面的警告因?yàn)槲矣昧舜罅康膭e名而不是全稱


PowerShell Script Analyzer, Script browser 和 Pester



順便提一下和這個一起常見的的插件 Script Browser, 安裝方式很類似


PS C:\> Install-Module -name scriptbrowser
PS C:\> Enable-ScriptBrowser


這個script browser的功能允許我們直接在微軟的腳本中心里面搜索自己需要的腳本,比如我輸入cpu,那么相關(guān)的腳本自動就出來了

PowerShell Script Analyzer, Script browser 和 Pester


最后來看看什么是 Pester。


Pester 是基于TDD方式的單元測試框架。TDD(Test-Driven Development)的意思是我們想實(shí)現(xiàn)某個功能,我們先寫一個測試的代碼出來,然后執(zhí)行他會報(bào)錯,因?yàn)檎嬲墓δ艽a我們還沒實(shí)現(xiàn);然后我們再根據(jù)我們預(yù)先寫好的測試代碼,倒過來去寫功能以便他能通過測試。當(dāng)測試功能都通過的時候 我們認(rèn)為這個開發(fā)的功能就實(shí)現(xiàn)了。


首先下載模塊,這個可以從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


現(xiàn)在來看個實(shí)際的例子,比如說我想寫一個function來測試能否ping通一個計(jì)算機(jī)。按照TDD的邏輯,我實(shí)現(xiàn)這個功能之前,先把他的測試代碼寫出來。


首先學(xué)習(xí)第一個命令是new-fixture,指定一個目錄和function的名字,他會自動創(chuàng)建一個目錄,并且在這個目錄下創(chuàng)建兩個文件出來。第一個文件是我需要實(shí)現(xiàn)功能的腳本文件;第二個是這個功能腳本對應(yīng)的測試文件。后者在前面的名字后自動加了一個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里面打開看看自動生成的內(nèi)容

PS C:\temp\tester> psEdit .\PingHostExample\pinghost.ps1
PS C:\temp\tester> psEdit .\PingHostExample\pinghost.Tests.ps1


第一個是空的


PowerShell Script Analyzer, Script browser 和 Pester


第二個自動生成一個測試的模板;注意前兩行的作用是獲取當(dāng)前目錄,然后獲取第一個腳本的名字,然后dot source 導(dǎo)入到內(nèi)存里面。


Describe的意思這一組測試的名字是啥; It代表的每一個單獨(dú)的測試,后面跟了個名字, 大括號里面有個管道,管道前面是要執(zhí)行的操作;后面是理論上應(yīng)該出現(xiàn)的結(jié)果;他們會進(jìn)行匹配,如果失敗,就會報(bào)錯。

PowerShell Script Analyzer, Script browser 和 Pester


現(xiàn)在來執(zhí)行一下試試看, invoke-Pester這個命令會自動的在當(dāng)前目錄和子目錄下尋找執(zhí)行 test.ps1命名的腳本,當(dāng)然也可以指定某個目錄搜索


結(jié)果報(bào)錯。這是正常的,因?yàn)閜inghost.ps1里面現(xiàn)在是空的。 可以看見報(bào)錯命令是返回結(jié)果是true,而我們定義的測試文件期望返回值為false 所以報(bào)錯

PowerShell Script Analyzer, Script browser 和 Pester


現(xiàn)在修改一下我的腳本

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
    }
}


執(zhí)行看看,成功

PowerShell Script Analyzer, Script browser 和 Pester



Pester有很多function,上面的例子僅僅介紹了最簡單的幾個。接下來博客豆子會進(jìn)一步說明其他function。


PowerShell的開發(fā)和使用是微軟系統(tǒng)未來的方向,比如最新的windows 2016 nano server就完全摒棄了本地登錄和圖形界面,只能通過powershell進(jìn)行遠(yuǎn)程配置?,F(xiàn)在看來,掌握了基本的PowerShell 完全不夠,未來需要學(xué)習(xí)的東西還有很多。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI