如果你想在不同的场景中使用PowerShell脚本和命令,你可以把它们转化为可重用的函数。在如何表示脚本中的代码方面,PowerShell有很大的灵活性。
如果你追求在一个代码块中写出几百行的代码,那么这不是合适的方法,因为通常很难阅读大的代码块。你可以把它分解成小的函数,使程序更容易理解,更有条理,更可重复使用。
什么是PowerShell中的函数?
在PowerShell中,函数是一个具有可选的输入和输出的代码集合。它是形成一个指令序列,通过简单地调用它而不是重复地复制它来执行一次或多次。函数大大改善了你的代码的可读性和可用性,使处理重复代码变得更加容易。
它接受参数作为输入,并返回分配给一些变量的值,管道到其他函数,或作为输入的cmdlet,或在屏幕上显示为输出。与其说是重复代码,不如说是在脚本中定义了函数后,可以根据需要多次调用。在PowerShell中,有两种类型的函数:基本和高级。
PowerShell中的基本函数
我们可以在PowerShell中创建的最简单形式的函数被称为 "基本 "函数。这些函数不利用任何内置功能。一组大括号 { } 被用来定义函数的主体。在使用PowerShell函数时,管理员最简单的选择是使用基本函数,因为这些函数没有任何继承的功能。你必须在函数的代码中明确定义所有的错误流。
PowerShell中的高级函数
高级函数具有与基本函数相同的属性,但它们包括基本函数所不具备的额外功能。例如,PowerShell包含像Verbose、Warning、Debug、Error等流。这些流对于准确显示输出是至关重要的。
在PowerShell中创建基本函数
现在,我们来看看在PowerShell中创建基本函数的方法。为此,打开你的Windows PowerShell ISE并创建一个新文件。
函数关键字用于在PowerShell中声明一个函数,后面是函数名称和大括号。函数的代码或主体就在这些大括号{ }内。
function Get-Version {
$PSVersionTable.PSVersion
}
我们将在运行时执行这个 "Get-Version"函数。现在,将脚本保存为 "testfile1.ps1"并运行它。
在PowerShell终端,用它的名字来调用创建的函数。
> Get-Version
它将向你显示以下输出。
当函数被加载到你的系统内存时,你可以查看函数PSDrive上的函数。为此,使用 "Get-ChildItem"命令来检查Function PSDrive的子项。这里,利用"-**Path **"选项来指定函数PSDrive的路径。
> Get-ChildItem -Path Function:\Get-*Version
在当前会话中,你可以通过使用 "Remove-Item"命令来删除定义的函数。为此目的执行下面给出的命令。
> Get-ChildItem -Path Function:\Get-*Version | Remove-Item
使用管道操作符["|"],使该命令将管道出Function PSDrive的子项目到 "移除项目**"命令。**然后,"Remove-Item"cmdlet将从会话中删除创建的函数。
为了验证函数的删除,调用 "Get-Version"函数。它将向你显示以下输出。
PowerShell中的函数参数
现在,我们将编写一个函数,查询系统的所有命令,并返回具有某些参数名称的命令数量。如果你想这样做,在你的PowerShell中执行下面给出的脚本。
function Get-MrParameterCount {
param (
[string[]]$ParameterName
)
foreach ($Parameter in $ParameterName) {
$Results = Get-Command -ParameterName $Parameter -ErrorActionSilentlyContinue
[pscustomobject]@{
ParameterName = $Parameter
NumberOfCmdlets = $Results.Count
}
}
}
现在,我们用参数调用了 "Get-MrParameterCount"。
ComputerName, Computer, ServerName, Host, 和Machine。
> Get-MrParameterCount -ParameterName ComputerName, Computer, ServerName, Host, Machine
在PowerShell中创建高级函数
把一个基本的PowerShell函数变成一个高级函数真的很容易。高级函数的特点是有几个常用参数会自动添加到函数中。现在,我们将把上一节中定义的基本函数变成一个高级函数。
function Test-MrParameter {
param (
$ComputerName
)
Write-Output $ComputerName
}
注意,"Test-MrParameter"函数没有通用参数。可以用不同的方法查看公共参数。一种方法是使用带有"-Syntax "选项的 "Get-Command "来查看其语法。
> Get-Command -Name Test-MrParameter -Syntax
为了使该函数成为高级函数,添加 "CmdletBinding"。
function Test-MrCmdletBinding {
[CmdletBinding()] #<<-- This turns a regular function into an advanced function
param (
$ComputerName
)
Write-Output $ComputerName
}
同样,你可以通过执行下面给出的命令来检查这个高级函数的语法和参数。
> Get-Command -Name Test-MrCmdletBinding -Syntax
> (Get-Command -Name Test-MrCmdletBinding).Parameters.Keys
结论
你可以通过使用PowerShell中的函数将代码分成独立的构建块。它们不仅可以帮助你把代码分解成更小、更容易管理的部分,还可以促使你产生可测试和可读的代码。
函数还大大改善了你的代码的可读性和可用性,使你更容易处理重复代码。本文向你展示了在PowerShell 中使用 函数的一些方法,包括基本的和高级的。