Powershell企业应用 - 第03章 Powershell脚本的结构

Powershell既可以写成结构化的脚本结构,可以写成面向对象的脚本结构。

结构化的脚本结构的基础单位是函数,面向对象的脚本结构是类。

在本章中,将会为大家介绍建议的结构化的脚本结构,及其各个组成部分的说明。
Powershell的面向对象变成,在未来单独列一个专题进行介绍。

建议的结构化脚本结构分为以下6个部分:

  • 脚本的备注
  • 脚本的参数
  • 脚本的全局变量
  • 脚本的函数
  • 脚本的代码
  • 脚本的结束

我们将相似的内容写在一起,方便将来进行脚本的维护。

本章使用的工具: Windows Powershell ISE
点击“开始”,输入“ISE”,在搜索结果上点击 “以管理员身份运行”。


图一

脚本的结构框架

编写脚本的时候,建议使用统一规范的脚本的结构,来标准化企业的脚本风格。

以下是建议的脚本结构示意图(图二)。

图二

备注信息: 在脚本开始的时候编写备注信息对脚本进行描述。
参数:编写脚本所接受的参数。
全局变量:编写脚本中,任何代码块都可以使用的全局变量。
命令代码:脚本实际执行的命令行。
结尾: 显示一段话来表示脚本执行完毕。


脚本的备注

Powershell使用#进行单行备注。使用<# #>进行多行备注。
备注的信息是提供给用户或者代码维护者进行参考的,不会当作代码被执行。

#单行备注,从井号往后的内容不会被当作代码执行。

<#多行备注
 这里的内容不会被执行
#>

备注部分可以写明脚本的用途、作者、联系方式、注意事项等信息。

以下是脚本备注部分的范例:

<#
This is a demostration powershell script to show a standard script block structure
Author: Leo Zhang
Email: slqleozhang@163.com
QQ: 1756188585
#>


脚本的参数

Param( )定义脚本所接受的参数,参数也是变量,所以需要在变量名前面添加美金$符号。

Param (
  $参数名称,
  $参数名称
)

这里定义的参数,在执行脚本的时候,可以使用-参数名称 <参数值>的方式传入。

以下是参数的范例:

<# 
    This is a demostration powershell script to show a standard script block structure 
    Author: Leo Zhang
    Email:  slqleozhang@163.com
    QQ:     1756188585
#>

Param (
    $ComputerName,
    $DiskDrive
)

Write-Host ("You want to obtain disk information of {0}'s {1}" -F $ComputerName, $DiskDrive)

执行脚本时,按要求输入相关的函数。

.\Describe-ScriptStructure.ps1 -ComputerName LocalHost -DiskDrive D:  

输出: You want to obtain disk information of LocalHost's D:

全局变量

Powershell脚本中,每个函数代码块中申明的变量是局部变量,变量的作用域仅限于代码块中,在其他代码块看不到。

在脚本中直接声明的变量叫做全局变量,这个变量可以在脚本的任何代码块中使用。在方法的代码块中调用全局变量,需要用$Global:变量名的格式。

脚本中声明和使用全局变量的范例:

<# 
    This is a demostration powershell script to show a standard script block structure 
    Author: Leo Zhang
    Email:  slqleozhang@163.com
    QQ:     1756188585
#>

Param (
    $ComputerName,
    $DiskDrive
)

$username = "Leo Zhang"   #全局变量

Function Change-Username{

    $Global:username = "Super Mario"   #对全局标量进行修改

}

Write-Host $username   #Leo Zhang
Change-Username
Write-Host $username   #Super Mario

函数 Function

在脚本中使用函数,可以减少代码的冗余,将需要多次运行的代码放到函数中,可以减少程序的代码量,使脚本的逻辑更加清晰。

函数的定义示例:

Function 函数名 {
   Param(
   $参数1,参数2,...,参数n)

  代码语句1;
  代码语句2;
  代码语句n;
}

当脚本中多个函数有相互调用关系的话,需要注意函数的书写顺序,被调用的函数要写在前面。

函数的范例:

<# 
    This is a demostration powershell script to show a standard script block structure 
    Author: Leo Zhang
    Email:  slqleozhang@163.com
    QQ:     1756188585
#>

Param (
    $ComputerName,
    $DiskDrive
)

#定义Brush-Teech函数
Function Brush-Teeth{    
    Write-Host "I brush teeth."
}

#定义Wash-Face函数
Function Wash-Face{
    Brush-Teeth   #洗脸前先刷牙,此函数调用Brush-Teech函数。
    Write-Host "I wash face"
}

Wash-Face
Write-Host "脚本执行完毕"

运行:
D:\Describe-ScriptStructure.ps1
I brush teeth.
I wash face
脚本执行完毕

命令代码

这部分是脚本真正开始工作的逻辑,也就是我们的业务逻辑会写在这个部分。多多使用函数来简化这部分的内容,让代码清晰。

编写代码的时候,要用注释对代码进行说明。也要注意注释的准确性,错误的注释比没有注释还要有害。


脚本的结束

可以在脚本的最后添加一句话,让使用者了解脚本已经执行完毕。

Write-Host "脚本执行完毕"

另外,还可以放置Return命令在脚本的末尾,它的作用是退出脚本,并且返回一个值。我们可以返回0代表脚本成功执行,返回 -1 代表脚本执行过程遇到问题。

return 0 或者 return -1

<# 
    This is a demostration powershell script to show a standard script block structure 
    脚本执行成功,返回0; 执行失败,返回-1.
#>

Param (
    $username
)


if ($username -ne $null) {Return 0} 
else {Return -1}

执行结果:
PS D:\> $result = D:\Describe-ScriptStructure.ps1 

PS D:\> $result 
-1

PS D:\> $result = D:\Describe-ScriptStructure.ps1 -username 'Leo Zhang'

PS D:\> $result 
0

通过本章的学习,相信大家已经了解了脚本的标准化结构和各个部分的功用。

谢谢观看。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。