如何從 PowerShell 函數返回多個項目

  1. 使用數組從 PowerShell 函數返回多個項目
  2. 使用 [PSCustomObject] 從 PowerShell 函數返回多個項目
  3. 使用雜湊表從 PowerShell 函數返回多個項目
  4. 使用自定義對象從 PowerShell 函數返回多個項目
  5. 結論
如何從 PowerShell 函數返回多個項目

在使用 PowerShell 函數時,通常會出現有效返回多個值的需求。一個有效的方法是利用數組、[PSCustomObject]、雜湊表或自定義對象來封裝和呈現這些值。

在本文中,我們將深入探討如何使用所提到的方法從 PowerShell 函數返回多個項目。我們將為每個方法概述逐步程序並提供代碼示例以圖示其實現並展示其輸出。

使用數組從 PowerShell 函數返回多個項目

要使用數組從 PowerShell 函數返回多個值,請按照以下步驟操作:

  • 宣告一個數組變數:首先在函數中宣告一個數組變數以保存您想要返回的多個值。
  • 填充數組:用您想要返回的值填充數組。您可以使用索引將元素添加到數組中。
  • 返回數組:將填充好的數組作為函數的輸出返回。

讓我們創建一個簡單的 PowerShell 函數,使用數組返回多個值。

function Get-MultipleValues {
    $values = @()

    $values += "Value1"
    $values += "Value2"
    $values += "Value3"

    return $values
}

$resultArray = Get-MultipleValues

Write-Output "Values returned from the function:"
foreach ($value in $resultArray) {
    Write-Output $value
}

輸出:

Values returned from the function:
Value1
Value2
Value3

在這個例子中,我們有一個名為 Get-MultipleValues 的函數。在函數內,我們宣告了一個數組變數 $values

然後,我們用三個值填充這個數組:"Value1""Value2""Value3"。最後,我們將填充好的數組作為函數的輸出返回。

調用函數時,我們將結果存儲在一個變數 ($resultArray) 中,並使用循環顯示數組中的值。

使用 [PSCustomObject] 從 PowerShell 函數返回多個項目

您也可以使用 [PSCustomObject] 在 PowerShell 中創建自定義對象。它允許您為對象定義屬性和值,使其成為從函數返回多個值的合適選擇。

要使用 [PSCustomObject] 創建自定義對象,您只需像這樣定義屬性及其相應的值:

$customObject = [PSCustomObject]@{
    Property1 = 'Value1'
    Property2 = 'Value2'
    ...
}

要在 PowerShell 函數中使用 [PSCustomObject] 返回多個值,首先定義 PowerShell 函數並創建 [PSCustomObject] 的實例。在自定義對象中定義您想要返回的屬性和值。

function Get-MultipleValues {
    [CmdletBinding()]
    param (
        [string]$Value1,
        [int]$Value2,
        [string]$Value3
    )

    $resultObject = [PSCustomObject]@{
        Name    = $Value1
        Age     = $Value2
        Address = $Value3
    }

    return $resultObject
}

現在,您可以調用該函數並檢索包含多個值的自定義對象。

$result = Get-MultipleValues -Value1 'Rohan' -Value2 21 -Value3 'UK'

Write-Output "Values returned from the function:"
foreach ($value in $result) {
    Write-Output $value
}

輸出:

Values returned from the function:
Name  Age Address
----  --- -------
Rohan  21 UK

如我們所見,上述 PowerShell 代碼引入了一個名為 Get-MultipleValues 的函數。該函數標記為 [CmdletBinding()],指示其能夠利用常見 cmdlet 參數。

在函數內,定義了三個參數:$Value1(字符串)、$Value2(整數)和 $Value3(字符串)。該函數使用這些參數構建了一個名為 $resultObject 的自定義對象,並將它們分配給自定義對象中的屬性 NameAgeAddress

return $resultObject 語句確保該自定義對象作為 Get-MultipleValues 函數的輸出。

之後,該腳本調用 Get-MultipleValues 函數,為每個參數指定值:$Value1 設置為 'Rohan'$Value2 設置為 21$Value3 設置為 'UK'。生成的自定義對象包含提供的參數值,並存儲在變數 $result 中。

接下來,該腳本使用 Write-Output 在控制台上顯示消息,並啟動一個循環,遍歷存放在 $result 中的自定義對象的屬性。對於每個屬性,該腳本在控制台上顯示屬性名稱及其相應值。

使用雜湊表從 PowerShell 函數返回多個項目

在 PowerShell 中,雜湊表是無序的鍵值對集合。每個鍵必須是唯一的,相關聯的值可以是任何數據類型。

它也稱為字典或關聯數組。當您需要根據特定鍵存儲和檢索數據時,雜湊表特別有用,提供了一種結構化的方式來組織信息。

要使用雜湊表從 PowerShell 函數返回多個值,請按照以下步驟操作:

  • 創建一個雜湊表:在函數中實例化一個雜湊表以存儲表示您想要返回的數據的鍵值對。

    您可以使用 @{} 在 PowerShell 中創建雜湊表。鍵和值放在 {} 括號中。

    創建雜湊表的語法如下。

    @{ <key> = <value>; [<key> = <value> ] ... }
    
  • 添加鍵值對:將鍵值對添加到雜湊表中,將每個值與唯一鍵關聯。
  • 返回雜湊表:將填充的雜湊表作為函數的輸出返回。

讓我們以名為 user 的函數為例,使用雜湊表返回多個值。

代碼:

function user() {
    $hash = @{ Name = 'Rohan'; Age = 21; Address = 'UK' }
    return $hash
}

$a = user
Write-Host "$($a.Name) is $($a.Age) and lives in $($a.Address)."

輸出:

Rohan is 21 and lives in UK.

如我們所見,這段代碼使用 function 關鍵字定義了一個名為 user() 的函數。在這個函數內,使用 @{} 語法創建了一個名為 $hash 的雜湊表,包含三個鍵值對: Name 的值為 'Rohan'Age 的值為 21Address 的值為 'UK'

return $hash 語句確保該雜湊表作為 user() 函數的輸出。

隨後,該腳本調用 user() 函數,並將結果雜湊表賦值給變數 $a。這意味著 $a 現在持有 user() 函數返回的雜湊表。

最後,使用 Write-Host cmdlet 在控制台顯示消息。該消息包含來自存儲在 $a 中的雜湊表的值,通過 $($a.Name)$($a.Age)$($a.Address) 獲取 NameAgeAddress 的值。

現在,讓我們創建另一個 PowerShell 函數來計算兩個數的總和和乘積,並使用雜湊表返回結果。

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultHashTable = @{
        Sum     = $num1 + $num2
        Product = $num1 * $num2
    }

    return $resultHashTable
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result['Sum'])"
Write-Output "Product: $($result['Product'])"

輸出:

Sum: 12
Product: 35

這段代碼開始時定義了一個名為 Calculate-SumAndProduct 的函數,該函數接受兩個 int 參數:$num1$num2。在函數內,使用 @{} 語法創建了一個名為 $resultHashTable 的雜湊表。

這個雜湊表包含兩個鍵值對:Sum 的值等於 $num1$num2 的和,Product 的值等於 $num1$num2 的乘積。然後,該函數返回這個雜湊表,使其成為 Calculate-SumAndProduct 函數的輸出。

在腳本的後續過程中,定義了兩個輸入數字:$inputNum1 的值為 5$inputNum2 的值為 7。使用這些輸入數字調用 Calculate-SumAndProduct 函數,並將結果雜湊表存儲在名為 $result 的變數中。

最後,該腳本使用 Write-Output cmdlet 根據存儲在 $result 中的雜湊表顯示總和和乘積值。

使用自定義對象從 PowerShell 函數返回多個項目

在 PowerShell 中,自定義對象是 System.Management.Automation.PSCustomObject 類的實例。它允許您定義與這些屬性相關聯的屬性和值,模擬現實世界對象。

自定義對象靈活且能夠以結構化的方式組織和檢索數據。

要使用自定義對象從 PowerShell 函數返回多個值,請按照以下步驟操作:

  • 定義一個自定義對象:在函數內創建一個自定義對象並定義您想要返回的值的屬性。
  • 分配屬性值:將您想要返回的值分配給自定義對象的屬性。
  • 返回自定義對象:將填充的自定義對象作為函數的輸出返回。

讓我們創建一個 PowerShell 函數,計算兩個數的總和和乘積,並使用自定義對象返回結果。

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultObject = New-Object PSObject
    $resultObject | Add-Member -MemberType NoteProperty -Name "Sum" -Value ($num1 + $num2)
    $resultObject | Add-Member -MemberType NoteProperty -Name "Product" -Value ($num1 * $num2)

    return $resultObject
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result.Sum)"
Write-Output "Product: $($result.Product)"

輸出:

Sum: 12
Product: 35

在本例中,我們定義了一個名為 Calculate-SumAndProduct 的函數,該函數接受兩個輸入數字 ($num1$num2)。在函數內,我們創建了一個名為 $resultObject 的自定義對象,並為其添加屬性 (SumProduct),將相應的計算值分配給它。

當用輸入數字 (57) 調用函數時,我們將結果存儲到變數 ($result) 中。我們然後通過訪問結果自定義對象的屬性顯示總和和乘積。

結論

本文探討了從函數返回多個值的各種技術,包括使用數組、[PSCustomObject]、雜湊表和自定義對象。每種方法都有其優勢,可以根據您腳本的具體需求進行選擇。

數組提供了一種直接返回多個值的方式,特別是當數據項共享類似的類型或結構時。[PSCustomObject] 使您可以創建具有命名屬性的自定義對象,提供了一種結構化的數據返回方法。

雜湊表在基於特定鍵的數據檢索場景中表現出色,提供了一種組織和高效的解決方案。使用 [System.Management.Automation.PSCustomObject] 類構建的自定義對象提供了靈活性,並模擬現實世界對象。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相關文章 - PowerShell Function