如何使用函数返回

函数返回未被其他东西捕获的所有内容。
如果你使用 return 关键字,返回行之后的每个语句都不会被执行!

像这样:

Function Test-Function
{
    Param
    (
        [switch]$ExceptionalReturn
    )
    "Start"
    if($ExceptionalReturn){Return "Damn, it didn't work!"}
    New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
    Return "Yes, it worked!"
}

测试功能
将返回:

  • 开始
  • 新创建的注册表项(这是因为有一些语句可以创建你可能不期望的输出)
  • 是的,它奏效了!

Test-Function -ExceptionalReturn 将返回:

  • 开始
  • 该死的,它没用!

如果你这样做:

Function Test-Function
{
    Param
    (
        [switch]$ExceptionalReturn
    )
    . {
       "Start"
        if($ExceptionalReturn)
        {
            $Return = "Damn, it didn't work!"
            Return
        }
        New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
        $Return = "Yes, it worked!"
        Return 
    } | Out-Null
    Return $Return
}

测试功能
将返回:

  • 是的,它奏效了!

Test-Function -ExceptionalReturn 将返回:

  • 该死的,它没用!

有了这个技巧,你可以控制返回的输出,即使你不确定每个语句将吐出什么。

它的工作原理如下

.{<Statements>} | Out-Null

这个。使得以下
脚本块包含在代码中{}标记脚本块
| Out-Null 将任何意外输出传递给 Out-Null(因此它已经消失了!)
因为包含了 scriptblock,所以它与函数的其余部分具有相同的范围。
因此,你可以访问在 scriptblock 中创建的变量。