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