ZetCode

PowerShell 调用运算符

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的调用运算符 (&)。此运算符用于执行命令、脚本或脚本块。它在命令执行和字符串评估方面提供了灵活性。

调用运算符基础知识

PowerShell 中的调用运算符 (&) 执行命令、脚本或脚本块。它可以运行存储在变量或字符串中的命令。在处理动态命令执行时,此运算符很有帮助。它对于执行包含空格的路径特别有用。

基本的调用运算符用法

调用运算符最简单的用法是执行命令或脚本。该运算符后跟命令名称或路径。这等同于直接键入命令。该运算符有助于提高命令的清晰度。

call1.ps1
& notepad

此命令使用调用运算符启动记事本。该运算符执行 notepad.exe 应用程序。这在功能上等同于直接键入“notepad”。

执行路径中带空格的脚本

在执行路径中包含空格的脚本时,调用运算符至关重要。没有它,PowerShell 会将每个空格分隔的部分视为一个单独的命令。该运算符确保整个路径被视为一个整体。路径周围必须有引号。

call2.ps1
& "C:\My Scripts\test script.ps1"

此命令执行位于包含空格的路径中的脚本。调用运算符正确处理带引号的路径。没有它,PowerShell 会生成错误。

执行存储在变量中的命令

调用运算符可以执行存储在变量中的命令。这对于动态命令构建很有用。变量可以包含整个命令字符串。该运算符会评估并执行内容。

call3.ps1
$command = "Get-Process"
& $command

此示例将“Get-Process”存储在变量中并执行它。调用运算符将变量内容评估为命令。此技术能够基于运行时条件进行动态命令执行。

与 Invoke-Expression 结合使用

调用运算符可以与 Invoke-Expression 结合使用以处理复杂场景。Invoke-Expression 将字符串评估为 PowerShell 代码。它们共同提供了强大的动态执行功能。由于安全原因,应谨慎使用此功能。

call4.ps1
$cmd = "Get-ChildItem"
& { Invoke-Expression $cmd }

此示例展示了如何结合使用这两个运算符。脚本块执行带有命令字符串的 Invoke-Expression。此模式对于需要动态代码评估的高级脚本场景很有用。

执行带参数的外部程序

调用运算符可以执行带参数的外部程序。参数可以在命令之后传递。这与直接命令执行类似。该运算符正确处理参数传递。

call5.ps1
& "C:\Program Files\Internet Explorer\iexplore.exe" "https://zetcode.cn"

此命令使用特定 URL 启动 Internet Explorer。调用运算符确保正确处理带空格的路径。URL 参数会正确传递给应用程序。

与脚本块一起使用

调用运算符可以执行用花括号定义的脚本块。脚本块是可重用的代码单元。它们可以接受参数并返回值。该运算符在当前范围内执行脚本块。

call6.ps1
$block = { param($name) "Hello, $name!" }
& $block -name "PowerShell"

此示例定义了一个接受参数的脚本块。调用运算符使用提供的参数执行该脚本块。输出将是“Hello, PowerShell!”。脚本块对于代码重用非常强大。

使用调用运算符进行错误处理

错误处理与调用运算符一起正常工作。Try/Catch 块可以捕获异常。这对于健壮的脚本执行很重要。该运算符不会改变被调用命令的错误行为。

call7.ps1
try {
    & "nonexistent_command"
} catch {
    Write-Host "Command failed: $_"
}

此示例演示了使用调用运算符进行错误处理。不存在的命令会触发异常。Catch 块会捕获并显示错误消息。此模式可确保平稳失败。

与 splatting 结合使用

调用运算符可以与 splatting 结合用于参数传递。Splatting 使用哈希表来提供参数。这使得命令更具可读性。该运算符正确处理 splatted 参数。

call8.ps1
$params = @{
    Path = "C:\Windows"
    Recurse = $true
    File = $true
}
& { Get-ChildItem @params }

此示例使用 splatting 将参数传递给 Get-ChildItem。调用运算符执行包含 splatted 命令的脚本块。此技术提高了复杂命令的代码可读性。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的调用运算符。

作者

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

列出 所有 PowerShell 教程