Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get ValueFromRemainingArguments as an hashtable

Tags:

powershell

Using [parameter(ValueFromRemainingArguments=$true)] one can get all the remaining arguments passed to the function into a variable as a list.

How can I get the remaining arguments as a hashtable type, for example for inputs like Function -var1 value1 -var2 value2?

like image 357
iTayb Avatar asked Jan 04 '15 10:01

iTayb


1 Answers

There are multiple ways to achieve this. The following solution supports parameters with:

  • Simple value (single item)
  • Array value
  • Null value (switch)

Script:

function testf {

    param(
        $name = "Frode",
        [parameter(ValueFromRemainingArguments=$true)]
        $vars
    )

    "Name: $name"
    "Vars count: $($vars.count)"
    "Vars:"

    #Convert vars to hashtable
    $htvars = @{}
    $vars | ForEach-Object {
        if($_ -match '^-') {
            #New parameter
            $lastvar = $_ -replace '^-'
            $htvars[$lastvar] = $null
        } else {
            #Value
            $htvars[$lastvar] = $_
        }
    }

    #Return hashtable
    $htvars

}

testf -simplepar value1 -arraypar value2,value3 -switchpar

Output:

Name: Frode
Vars count: 5
Vars:

Name      Value
----      -----
arraypar  {value2, value3}
switchpar
simplepar value1
like image 63
Frode F. Avatar answered Sep 19 '22 09:09

Frode F.