如何从Powershell函数返回多个项目

如何从Powershell函数返回多个项目,powershell,Powershell,在一个脚本中,我有几个函数需要分解。它们可以是,-r,或者-r,而我提出的提取数据的机制不止两行,所以我想把它放到一个单独的函数中 但是当我这样做的时候,我最终得到了三个变量,其中包含函数本地的相关数据,我看不到任何方法可以将这三个变量都传递给调用方 在正确的编程语言中,我将返回一个包含所有三个值的复合类型,但我不知道如何在Powershell中实现这一点。当然,我可以将其分为三个单独的函数,但是我又回到了违反规则的地方 那么我能在Powershell做什么 您可以返回一个[string]数组,

在一个脚本中,我有几个函数需要分解。它们可以是
-r
,或者
-r
,而我提出的提取数据的机制不止两行,所以我想把它放到一个单独的函数中

但是当我这样做的时候,我最终得到了三个变量,其中包含函数本地的相关数据,我看不到任何方法可以将这三个变量都传递给调用方

在正确的编程语言中,我将返回一个包含所有三个值的复合类型,但我不知道如何在Powershell中实现这一点。当然,我可以将其分为三个单独的函数,但是我又回到了违反规则的地方


那么我能在Powershell做什么

您可以返回一个
[string]
数组,然后让调用者拆分它,或者返回一个,并且调用者总是进行拆分

我同意@Christian,我添加了另一个解决方案

首先可以显式或隐式使用数组返回:

A) 明确地

function ExplicitArray ()
{
  $myArray = @()

  $myArray += 12
  $myArray += "Blue"

  return ,$myArray
}

Clear-Host
$a = ExplicitArray
Write-Host "values from ExplicitArray are $($a[0]) and $($a[1])"
B) 含蓄地

function ImplicitArray ()
{
  Write-Output 12

  Write-Output "Blue"
  return "green"
}

$b = ImplicitArray
Write-Host "values from ImplicitArray are $($b[0]), $($b[1]) and $($b[2])"
Second您可以返回自定义对象:

A) 缩略形式

function ReturnObject ()
{
  $value = "" | Select-Object -Property number,color
  $value.Number = 12
  $value.color = "blue"
  return $value
}
$c = ReturnObject
Write-Host "values from ReturnObject are $($c.number) and $($c.color)"
B) 学校形式

function SchoolReturnObject ()
{
  $value = New-Object PsObject -Property @{color="blue" ; number="12"}
  Add-Member -InputObject $value –MemberType NoteProperty –Name "Verb" –value "eat"
  return $value
}
$d = SchoolReturnObject
Write-Host "values from SchoolReturnObject are $($d.number), $($d.color) and $($d.Verb)"
第三个通过引用使用参数

function addition ([int]$x, [int]$y, [ref]$R)
{
 $Res = $x + $y
 $R.value = $Res
}

$O1 = 1
$O2 = 2
$O3 = 0
addition $O1 $O2 ([ref]$O3)
Write-Host "values from addition $o1 and $o2 is $o3"

也许我误解了这个问题,但这不就是返回一个变量列表那么简单吗?调用者只是将每个变量分配给一个变量。 就是

$a是一个数组,$b是字母“b”

> $a 
a
c
> $b
b

哦,那个自定义对象看起来和我需要的完全一样!这里缺少一个示例,这将非常有用。啊,您可以通过引用传递参数!我不知道。谢谢请注意,在上面的示例中不必使用
return
语句return通常仅用于更改函数的正常退出点。我尊重您的观点。我的观点是
return$value
使函数代码更具可读性,而且在我的代码中,我从来没有在函数中使用写输出。我存在关于结构化编程的旧规则,我试图apply@JPBlanc:谢谢你的全面回答。我接受了另一个答案,thouqh,因为Christian是第一个,我最终按照他的建议做了(使用自定义对象)。有人能解释一下为什么在
return,$myArray
中需要逗号吗。来自PowerShell以外的语言,我不明白为什么需要逗号(尽管通过测试,我同意它是!)这正是我需要的,非常感谢。解决方案越简单越好:)
> $a 
a
c
> $b
b