ZetCode

PowerShell 函数

最后修改:2025 年 2 月 15 日

在本文中,我们将探讨 PowerShell 函数,它们是 PowerShell 脚本编写和自动化的基本组成部分。函数是封装特定任务或操作的可重用代码块,使其高效且模块化。通过使用函数,我们可以将复杂的脚本分解成更小、更易于管理的块,从而增强脚本的整体结构和可读性。这种模块化方法不仅使我们的代码更易于理解,而且简化了维护和调试。

函数可以接受参数,允许我们传递数据并根据提供的输入自定义函数的行为。参数使函数变得灵活且用途广泛,使我们能够在不同场景下使用不同的输入重用同一个函数。此外,函数还可以返回值,这些值可用于脚本的其他部分,甚至可以传递给其他函数。通过将函数链接在一起并在它们之间传递数据,这种能力使我们能够构建复杂的工作流并自动化复杂的进程。

通过理解和利用 PowerShell 函数,我们可以创建更有条理、更高效、更易于维护的脚本。函数帮助我们遵循代码重用和模块化原则,这是编写高质量 PowerShell 脚本的关键。在本文中,我们将深入探讨定义和使用函数、处理参数、返回值以及创建健壮且可重用 PowerShell 函数的最佳实践。

PowerShell 函数

在第一个示例中,我们将定义并调用一个简单的 PowerShell 函数。

function.ps1
function SayHello {
    param (
        [string]$name
    )

    Write-Output "Hello, $name!"
}

SayHello -name "John Doe"

在此程序中,我们定义了一个名为 SayHello 的函数。它接受一个类型为 string 的参数 $name。该函数使用 Write-Output cmdlet 将问候语打印到控制台。

function SayHello {
    param (
        [string]$name
    )

我们定义了一个名为 SayHello 的函数。param 关键字用于定义函数参数。$name 参数的类型为 string

Write-Output "Hello, $name!"

我们使用 Write-Output cmdlet 将问候语打印到控制台。我们使用字符串插值将 $name 参数的值包含在输出中。

PS C:\> .\function.ps1
Hello, John Doe!

我们运行脚本并查看输出。

带有返回值的 PowerShell 函数

在下一个示例中,我们将定义一个返回值的 PowerShell 函数。

return.ps1
function AddNumbers {
    param (
        [int]$a,
        [int]$b
    )

    $sum = $a + $b
    return $sum
}

$result = AddNumbers -a 3 -b 5
Write-Output "The result is $result"

在此程序中,我们定义了一个名为 AddNumbers 的函数。它接受两个类型为 int 的参数 $a$b。该函数计算两个数字的和并返回它。

function AddNumbers {
    param (
        [int]$a,
        [int]$b
    )

    $sum = $a + $b
    return $sum
}

我们定义了一个名为 AddNumbers 的函数。它接受两个类型为 int 的参数 $a$b。该函数计算两个数字的和并返回它。

PS C:\> .\return.ps1
The result is 8

我们运行脚本并查看输出。

带有可选参数的 PowerShell 函数

在下一个示例中,我们将定义一个带有可选参数的 PowerShell 函数。

optional.ps1
function GetName {
    param (
        [string]$firstName,
        [string]$lastName = "Doe"
    )

    Write-Output "$firstName $lastName"
}

GetName -firstName "John"
GetName -firstName "Jane" -lastName "Smith"

在此程序中,我们定义了一个名为 GetName 的函数。它接受两个类型为 string 的参数 $firstName$lastName$lastName 参数的默认值为 "Doe"

PS C:\> .\optional.ps1
John Doe
Jane Smith

我们运行脚本并查看输出。

带有散列映射的 PowerShell 函数

在最后一个示例中,我们将使用散列映射(splatting)在 PowerShell 函数中。

splatting.ps1
function ProcessParams {
    param (
        [Parameter(Mandatory=$true)]
        [hashtable]$params
    )

    foreach ($key in $params.Keys) {
        Write-Output "${key}: $($params[$key])"
    }
}

$params = @{
    a = 3
    b = 5
}

ProcessParams -params $params

在此程序中,我们定义了一个名为 ProcessParams 的函数。它接受一个类型为 hashtable 的参数 $paramsProcessParams 函数使用 foreach 循环遍历 $params 散列映射中的键值对。

PS C:\> .\splatting.ps1
a: 3
b: 5

我们运行脚本并查看输出。

来源

PowerShell 文档

在本文中,我们探讨了 PowerShell 函数。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有多年的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有八年以上的经验。

列出 所有 PowerShell 教程