PowerShell Script Analyzer, Script browser 和 Pester
昨天在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 完全不够,未来需要学习的东西还有很多。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
MySQL索引原理及慢查询优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所 以查询语句的优化显然是重中之重。 本人从13年7月份起,一直在美团核心业务系统部做慢查询的优化工作,共计十余个系统,累计解决和积累了上百个慢查询案例。随着业务的复杂性提升,遇到的问题千奇百怪,五花八门,匪夷所思。本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。 一个慢查询引发的思考 select count(*) from task where status=2 andoperator_id=20839 andoperate_time>1371169729 andoperate_time<1371174603 andtype=...
-
下一篇
使用MySQL-Cluster搭建MySQL数据库集群
1、MySQL集群的作用: - 解决访问节点的单点故障 - 数据存储节点的单点故障 - 解决数据存储节点数据备份问题 2、集群: 使用一组服务器提供相同的服务 3、关于MySQL-Cluster: MySQL官方提供的集群版本 已集成标准版MySQL程序,可独立安装使用 采用NDB(Network DataBase)引擎 假定每个节点都有独立内存、硬盘 利用廉价硬件减少整个数据库的单点故障 4、集群中服务器的角色 - 数据节点:ndbd(单线程) ndb_mtd(多线程) 存储数据的(表里的记录) - Sql节点:mysqld 是客户端访问数据的接口,负责执行SQL命令 可理解为支持NDB的标准MySQL服务器,仅存储表结构、独立的用户授权 面向客户端提供用户鉴权、SQL查询等访问服务 - 管理节点:ndb_mgmd 管理集群中的所有服务器 客户端:client 访问数据 5、案例拓扑: 6、MySQL集群的搭建(配置) 1)公共配置: # rpm -qa | grep -i mysql # service mysql stop ; chkconfig mysql off # rpm ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)