如何使用函式返回

函式返回未被其他東西捕獲的所有內容。
如果你使用 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 中建立的變數。