如何从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$value
使函数代码更具可读性,而且在我的代码中,我从来没有在函数中使用写输出。我存在关于结构化编程的旧规则,我试图apply@JPBlanc:谢谢你的全面回答。我接受了另一个答案,thouqh,因为Christian是第一个,我最终按照他的建议做了(使用自定义对象)。有人能解释一下为什么在return,$myArray
中需要逗号吗。来自PowerShell以外的语言,我不明白为什么需要逗号(尽管通过测试,我同意它是!)这正是我需要的,非常感谢。解决方案越简单越好:)
> $a
a
c
> $b
b