解釋 PowerShell 高階函式。
在開始學習 PowerShell 高階函式之前,假設我們已經瞭解了 PowerShell 函式。您可以在下面檢視 PowerShell 函式的解釋。
https://tutorialspoint.tw/explain-the-powershell-function
這裡,我們將以計算不同型別運算的數學函式為例。我們已經有了一個簡單的函式程式碼,如下所示。
function math_Operation{ param([int]$val1,[int]$val2) Write-Host "Multiply : $($val1*$val2)" Write-Host "Addition : $($val1+$val2)" Write-Host "Subtraction : $($val1-$val2)" Write-Host "Divide : $($val1+$val2)" }
以上示例是一個簡單的函式。當您執行上述程式碼並在終端執行該函式時,您會注意到您只會看到 **$val1** 和 **$val2** 引數,而 PowerShell 高階函式包含其他 **通用引數**,例如 **ErrorAction、WarningAction、Verbose、Passthru 等**。
請檢視下面當函式用作 **簡單函式** 時的語法。沒有新增任何通用引數。
PS C:\WINDOWS\system32> Get-Help math_Operation NAME math_Operation SYNTAX math_Operation [[-val1] <int>] [[-val2] <int>] ALIASES None REMARKS None
要將簡單函式轉換為高階函式,我們只需要在函式中使用 [cmdletbinding]。
function math_Operation{ [cmdletbinding()] param([int]$val1,[int]$val2) Write-Host "Multiply : $($val1*$val2)" Write-Host "Addition : $($val1+$val2)" Write-Host "Subtraction : $($val1-$val2)" Write-Host "Divide : $($val1+$val2)" }
現在執行上述程式碼並檢查引數,您可以看到其他引數被稱為通用引數。檢查程式碼執行後此函式的語法。
PS C:\WINDOWS\system32> Get-Help math_Operation NAME math_Operation SYNTAX math_Operation [[-val1] <int>] [[-val2] <int>] [<CommonParameters>] ALIASES None REMARKS None
但這並沒有結束。PowerShell 高階函式還有更多內容。到目前為止,我們已經將簡單函式轉換為高階函式。讓我們檢查一下高階函式的結構。
高階函式結構
function Verb-Noun { [CmdletBinding()] param ( // Parameters to declare with their datatypes ) begin { // Initialization of variables, create a log file } process { // Program code to make this function work } end { // Clearing values, log files, etc. } }
在上面的函式中,您可以看到 **PowerShell 高階函式** 主要由 3 個塊組成(**Begin、Process 和 End**)。
在 **Begin** 塊中,您需要初始化變數的值或宣告日誌檔案等。此塊在其他兩個塊之前首先執行,並且只執行一次。
**Process** 塊是實際程式碼執行的地方,它使用在 **Param** 塊中宣告的引數以及在 Begin 塊中初始化的值和日誌檔案路徑。此塊對塊中的每個專案執行一次。
**End** 塊包含要從變數中釋放/清除的值和其他清理任務。此塊也只執行一次,在 Process 塊執行之後執行。
除了以上功能外,還支援許多其他引數屬性和引數,這些將在後續文章中進行解釋。只需瀏覽一下這些引數屬性和引數。
引數引數
強制
Parameter=0
ValueFromPipeline
ValueFromPipelineByPropertyName
ValueFromRemainingArguments
HelpMessage
引數屬性
Param
Parameter
[AllowNull()]
[AllowEmptyString()]
[AllowEmptyCollection()]
[ValidateCount()]
[ValidateLength()]
[ValidatePattern()]
[ValidateRange()]
[ValidateScript()]
[ValidateSet()]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[DynamicParam]
[Switch]