如何从 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

然后,我们用三个值填充这个数组:Value1Value2Value3。最后,我们将填充后的数组作为函数的输出返回。

调用该函数时,我们将结果存储在一个变量中($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.

正如我们所看到的,这段代码定义了一个名为 user() 的函数,使用了 function 关键字。在这个函数内部,使用 @{} 语法创建了一个名为 $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