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
通过本章的学习,相信大家已经了解了脚本的标准化结构和各个部分的功用。
谢谢观看。
