Get ValueFromRemainingArguments as an hashtable

前端 未结 4 1871
时光说笑
时光说笑 2020-12-10 07:23

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

How can I

4条回答
  •  我在风中等你
    2020-12-10 08:07

    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
    

提交回复
热议问题