提问人:sbi 提问时间:9/27/2012 更新时间:10/17/2023 访问量:107989
如何从 Powershell 函数返回多个项
How to return several items from a Powershell function
问:
在一个脚本中,我有几个函数需要分解SVN外部定义。这些可以是 、 或 ,我想出的提取数据的机制不仅仅是两行,所以我想把它放到一个单独的函数中。<url> <path>
-r<rev> <url> <path>
-r <rev> <url> <path>
但是当我这样做时,我最终会得到三个包含函数本地相关数据的变量,并且我认为没有办法将它们全部提供给调用者。
在适当的编程语言中,我会返回一个包含所有三个值的复合类型,但我不明白如何在 Powershell 中做到这一点。当然,我可以将其拆分为三个单独的函数,但随后我又回到了违反 DRY 规则的问题。
那么,我可以在 Powershell 中做什么呢?
答:
4赞
CB.
9/27/2012
#1
您可以返回一个数组,然后让调用方拆分它或返回一个自定义对象,并且调用方始终执行拆分。[string]
评论
0赞
sbi
9/27/2012
哦,那个自定义对象的东西看起来和我需要的完全一样!
21赞
OutOfThisPlanet
5/30/2018
这里缺少一个示例,这将很有用。
0赞
chenchuk
11/10/2023
示例如下:byteinthesky.com/powershell/...
103赞
JPBlanc
9/27/2012
#2
我同意@Christian,我添加了另一个解决方案。
首先,您可以显式或隐式地使用数组返回:
明确地
function ExplicitArray () { $myArray = @() $myArray += 12 $myArray += "Blue" return ,$myArray } Clear-Host $a = ExplicitArray Write-Host "values from ExplicitArray are $($a[0]) and $($a[1])"
隐 式
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])"
其次,您可以返回一个自定义对象:
简写形式
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)"
学校形式
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"
评论
3赞
sbi
9/27/2012
啊,你可以通过引用传递参数!我不知道。谢谢!
1赞
Keith Hill
9/28/2012
请注意,没有必要使用上述示例中的语句。 在 PowerShell 中,通常仅用于更改函数的正常退出点。return
return
4赞
JPBlanc
9/28/2012
这是你的观点,我尊重它。我的观点是使函数代码更具可读性,而且在我的代码中,我从不在函数中使用 Write-Output。我存在关于结构化编程的旧规则,我试图应用这些规则return $value
0赞
sbi
9/29/2012
@JPBlanc:谢谢你的全面回答。我接受了另一个答案,thouqh,因为克里斯蒂安是第一个,我最终按照他的建议做了(使用自定义对象)。
2赞
Dave Potts
4/14/2020
谁能解释一下为什么你需要逗号。来自 PowerShell 以外的语言,我不明白为什么需要逗号(尽管通过测试我同意它是!return ,$myArray
40赞
eythort
7/3/2015
#3
也许我误解了这个问题,但这不就是返回变量列表那么简单吗,调用者只是将每个变量分配给一个变量。 那是
> function test () {return @('a','c'),'b'}
> $a,$b = test
$a 将是一个数组,$b字母“b”
> $a
a
c
> $b
b
评论
0赞
jreed121
12/2/2023
被低估的答案。这绝对是最干净的解决方案。
评论