使用 PowerShell 函式

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 中函式和 Cmdlet 之間的區別
  2. PowerShell 中的函式簡介
  3. 向 PowerShell 中的函式新增引數
  4. 在 PowerShell 中的函式上建立簡單引數
使用 PowerShell 函式

當我們編寫 PowerShell 指令碼時,我們有很多選擇。例如,我們可以為任務編寫一千行程式碼,全部在一個程式碼塊中。

但是,那會很複雜。因此,我們應該編寫 PowerShell 函式。

PowerShell 函式極大地提高了我們程式碼的可用性和可讀性,使其更易於使用。在本文中,我們將學習編寫函式、新增和管理函式的引數,以及設定函式以接受管道輸入。

PowerShell 中函式和 Cmdlet 之間的區別

PowerShell 函式的概念可能聽起來很熟悉,因為它聽起來像本機 PowerShell cmdlet。例如,Write-HostStart-Service 等命令與函式非常相似。

但是,cmdlet 被命名為解決單個問題的程式碼片段,並且不容易定製。cmdlet 和函式之間的區別在於這些構造的製作方式。

我們可以使用 Get-Command cmdlet 及其 -CommandType 引數檢視哪些命令是 cmdlet 和函式。

Get-Command -CommandType Function

上面的命令返回當前載入到我們的 PowerShell 會話或 PowerShell 可用模組中的所有函式。

PowerShell 中的函式簡介

我們使用 function 關鍵字來定義一個函式,後跟一個描述性的、使用者定義的名稱和一組花括號。花括號內是我們希望 PowerShell 執行的指令碼塊。

下面我們可以看到一個主要功能和該功能的執行。該函式名為 Install-Software,使用 Write-Host 在控制檯中顯示輸出訊息(主要用於模擬安裝)。

定義後,我們可以使用該函式的名稱來執行其指令碼塊內的程式碼。

示例程式碼:

function Install-Software {
    Write-Host 'The software has been installed.'
}

Install-Software

輸出:

The software has been installed.

PowerShell 中動詞-名詞語法的函式命名約定最佳實踐

函式的名稱是必不可少的。我們可以隨意命名我們的函式,但名稱應該始終描述函式的作用。

PowerShell 中的函式命名約定最佳實踐是動詞-名詞語法。

我們應該始終以動詞開頭,後跟破折號和名詞。使用 Get-Verb cmdlet 查詢 approved 動詞列表。

在 PowerShell 中定義高階函式

本教程假設我們在本節中將前面的程式碼直接複製並貼上到 PowerShell 控制檯中。我們還可以在指令碼中定義函式。

我們在上一節中使用了一個小函式,因此在控制檯中定義它並不是什麼大問題。但是,大多數時候,我們將擁有更大的功能。

因此,在指令碼或模組中定義這些函式,然後呼叫該指令碼或模組將函式載入到記憶體中會更容易。

正如我們可能想象的那樣,每次我們想要調整其功能時重新鍵入一個更重要的函式可能會令人困惑。

向 PowerShell 中的函式新增引數

函式可以有任意數量的引數。當我們建立函式時,我們可以選擇包含引數並決定這些引數如何工作。

引數可以是可選的或強制的,它們可以被強制接受有限的引數列表之一或接受任何東西。

例如,我們通過 Install-Software 功能安裝的虛構軟體可能有許多可能的早期版本。但目前,Install-Software 功能無法讓使用者指定他們想要安裝的版本。

如果我們是唯一使用該函式的人,我們可以在每次需要特定版本時更改其中的程式碼,但這會耗費大量時間。這種方法也容易出現潛在的錯誤,我們希望其他人能夠使用我們的程式碼。

將引數引入我們的函式允許它具有可變性。正如變數允許我們編寫可以處理相同情況的多個版本的指令碼一樣,引數將使我們能夠編寫一個以多種方式完成一件事的函式。

在這種情況下,我們希望它安裝相同軟體的版本並在多臺計算機上安裝。

首先,讓我們在函式中新增一個引數,使使用者或我們能夠指定要安裝的版本。

在 PowerShell 中的函式上建立簡單引數

在函式上定義引數需要一個引數塊。引數塊儲存函式的所有引數。

使用 param 關鍵字後跟括號定義引數塊,如下所示。

示例程式碼:

function Install-Software {
	[CmdletBinding()]
	param()

	Write-Host 'The software has been installed.'
}

在這一點上,我們函式的實際功能並沒有改變一點。我們剛剛安裝了管道,為一個引數準備函式。

一旦我們新增了 param 塊,我們可以通過將其放在括號中來建立引數,如下所示。

示例程式碼:

function Install-Software {
	[CmdletBinding()]
	param(
		[Parameter()]
		[string] $Version
	)

	Write-Host "The software version $Version has been installed."

}

在上面的 param 塊中,我們將首先定義 Parameter 塊。使用 Parameter() 塊會將引數轉換為高階引數

像這裡這樣的空 param 塊什麼都不做,只是必需的; 我們將在下一節解釋如何使用它。

讓我們關注引數名稱前面的 [string] 型別。我們通過將引數的型別放在引數變數名稱之前的方括號之間來轉換引數。

PowerShell 將始終將預設值設定為字串。上面,變數 $Version 中傳遞的任何內容都將始終被視為字串。

我們還將 $Version 新增到我們的 Write-Host 語句中。然後,當我們使用 Version 引數執行 Install-Software 函式並傳遞一個版本號時,我們應該會收到一條訊息顯示。

示例程式碼:

Install-Software -Version 2

輸出:

The software version 2 has been installed.
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell Function