中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

PowerShell Script Analyzer, Script browser 和 Pester

發布時間:2020-06-11 10:40:00 來源:網絡 閱讀:3188 作者:beanxyz 欄目:開發技術

昨天在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看見多出來的選項,勾選之后出現一個新的窗口

PowerShell Script Analyzer, Script browser 和 Pester


隨便打開一個腳本文件掃描一下 就能看見一堆警告,比如下面的警告因為我用了大量的別名而不是全稱


PowerShell Script Analyzer, Script browser 和 Pester



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


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


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

PowerShell Script Analyzer, Script browser 和 Pester


最后來看看什么是 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


第一個是空的


PowerShell Script Analyzer, Script browser 和 Pester


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


Describe的意思這一組測試的名字是啥; It代表的每一個單獨的測試,后面跟了個名字, 大括號里面有個管道,管道前面是要執行的操作;后面是理論上應該出現的結果;他們會進行匹配,如果失敗,就會報錯。

PowerShell Script Analyzer, Script browser 和 Pester


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


結果報錯。這是正常的,因為pinghost.ps1里面現在是空的。 可以看見報錯命令是返回結果是true,而我們定義的測試文件期望返回值為false 所以報錯

PowerShell Script Analyzer, Script browser 和 Pester


現在修改一下我的腳本

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


執行看看,成功

PowerShell Script Analyzer, Script browser 和 Pester



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


PowerShell的開發和使用是微軟系統未來的方向,比如最新的windows 2016 nano server就完全摒棄了本地登錄和圖形界面,只能通過powershell進行遠程配置。現在看來,掌握了基本的PowerShell 完全不夠,未來需要學習的東西還有很多。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴川市| 柳河县| 吉木乃县| 涟源市| 梁山县| 宝清县| 沁源县| 五台县| 精河县| 林甸县| 固原市| 于田县| 屏边| 台山市| 浪卡子县| 泗洪县| 宁陵县| 营口市| 汤阴县| 永宁县| 乌鲁木齐市| 崇阳县| 新河县| 新民市| 抚远县| 宝清县| 搜索| 肥乡县| 大名县| 鄂尔多斯市| 庐江县| 兴和县| 巴林右旗| 贵德县| 丰都县| 衡东县| 行唐县| 冕宁县| 北票市| 塔城市| 景德镇市|