如何在PowerShell中使用函数

1,016 阅读3分钟

如果你想在不同的场景中使用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 中使用 函数的一些方法,包括基本的和高级的。