博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerShell Script Analyzer, Script browser 和 Pester
阅读量:6831 次
发布时间:2019-06-26

本文共 5617 字,大约阅读时间需要 18 分钟。

昨天在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 psscriptanalyzerPS C:\> Enable-ScriptAnalyzer

可以在ISE 的Add-On看见多出来的选项,勾选之后出现一个新的窗口

随便打开一个脚本文件扫描一下 就能看见一堆警告,比如下面的警告因为我用了大量的别名而不是全称

顺便提一下和这个一起常见的的插件 Script Browser, 安装方式很类似

PS C:\> Install-Module -name scriptbrowserPS 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 pesterCommandType     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\PingHostExampleMode                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.ps1PS 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 完全不够,未来需要学习的东西还有很多。

转载地址:http://agvkl.baihongyu.com/

你可能感兴趣的文章
两年前实习时的文档——Platform学习总结
查看>>
Performance Tuning MySQL
查看>>
【WP8】让TextBox文本支持滑动(Scroll)
查看>>
在IIS上创建FTP服务
查看>>
Orchard之在前台显式一个属于自己的列表
查看>>
openfire文件夹
查看>>
Eclipse下快速打开本地文件的插件easy explore
查看>>
uva216 Getting in Line
查看>>
黑龙潭,一个夏日亲子游的好地方
查看>>
编译安装 nginx的http_stub_status_module监控其运行状态
查看>>
双绞线的制作,T568A线序,T568B线序
查看>>
strcat的几种实现及性能比较
查看>>
Apache Spark技术实战之1 -- KafkaWordCount
查看>>
Add Binary Leetcode java
查看>>
缓存使用的一些注意事项
查看>>
将cocos2dx项目从VS移植到Eclipse
查看>>
android 屏幕适配原则
查看>>
plot sin 动态配置rc settings
查看>>
一次解决页面特效问题的排查记录
查看>>
Shopilex - 开源免费网店系统
查看>>