如何在Powershell中传递动态参数?

Den*_*s G 10 parameters powershell dynamic

我想调用具有动态数量参数的现有命令行开关.

所以不要这样做(以写主机为例),我想以聪明的方式做到这一点.

# these are the dynamic parameters which maybe get passed into my function or script
# they would be $null be default of course
$forecolor = 'Green'
$newline = $true

# now build the "dynamic" write-host...
if ($forecolor) {
    if ($newline) {
        write-host -fore $forecolor "Hello world"
    }
    else {
        write-host -fore $forecolor "Hello world" -nonewline
    }
}
else {
    if ($newline) {
        write-host "Hello world"
    }
    else {
        write-host "Hello world" -nonewline
    }
}
Run Code Online (Sandbox Code Playgroud)

这当然非常难看.帮我把它做得更漂亮!

我已经尝试过只设置$forecolor = '-fore Green'输出"-fore Green Hello world".我可以想到将一个参数列表传递给一个函数,并为列表中的每个参数添加相应的参数 - 我只是不知道如何保存参数.

Joe*_*oey 18

您可以将变量作为参数传递给Write-Host:

Write-Host -Fore $forecolor -NoNewLine:(!$newline) 'Hello World'
Run Code Online (Sandbox Code Playgroud)

对于真正动态的方式,您可以使用哈希表:

$params = @{ NoNewLine = $true; ForegroundColor = 'Green' }
Run Code Online (Sandbox Code Playgroud)

然后使用splat运算符

Write-Host @params Hello World
Run Code Online (Sandbox Code Playgroud)

在调用之前Write-Host,您可以根据需要将参数及其值添加到哈希表中.

  • **真棒!**这是一篇关于splatting的文章:http://technet.microsoft.com/en-us/magazine/gg675931.aspx之前从未听说过这种魔法.谢谢. (5认同)