How to return several items from a Powershell function

前端 未结 3 1957
有刺的猬
有刺的猬 2020-12-29 22:41

In a script I have several functions that need to break down an SVN external definition. These can either be , -r

相关标签:
3条回答
  • 2020-12-29 23:30

    I agree with @Christian, and I add another solution.

    First you can return using an array explicitly or implicitly :

    A) explicitly

    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) implicitly

    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 you can return a custom object :

    A) Short form

    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) School form

    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)"
    

    Third using argumen by reference

    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"
    
    0 讨论(0)
  • 2020-12-29 23:36

    Maybe I am misunderstanding the question but isn't this just as simple as returning a list of variables, and the caller simply assigns each to a variable. That is

    > function test () {return @('a','c'),'b'}
    > $a,$b = test
    

    $a will be an array, and $b the letter 'b'

    > $a 
    a
    c
    > $b
    b
    
    0 讨论(0)
  • 2020-12-29 23:38

    You can return an array of [string] and then let the caller split it or return a custom object and always the caller do the split.

    0 讨论(0)
提交回复
热议问题