将ValueFromRemainingArguments作为哈希表获取

iTa*_*ayb 3 powershell

使用[parameter(ValueFromRemainingArguments=$true)]一个可以将传递给函数的所有剩余参数作为列表获取到变量中.

如何将剩余的参数作为哈希表类型获取,例如对于像Function -var1 value1 -var2 value2?这样的输入?

Fro*_* F. 11

有多种方法可以实现这一目标.以下解决方案支持以下参数:

  • 简单价值(单项)
  • 数组值
  • 空值(开关)

脚本:

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
Run Code Online (Sandbox Code Playgroud)

输出:

Name: Frode
Vars count: 5
Vars:

Name      Value
----      -----
arraypar  {value2, value3}
switchpar
simplepar value1
Run Code Online (Sandbox Code Playgroud)