如何将powershell高级函数args打包到哈希表中

时间:2014-03-25 11:55:49

标签: function powershell arguments

我有一个功能

function Add-PromptSection() {
    [CmdletBinding()]
    Param(
        [ConsoleColor]$Fore,
        [ConsoleColor]$Back,
        [Switch]$Newline,
        [Scriptblock]$Condition,
        [String]$String
    )

    $args = <something>
}

我想要做的是将函数参数收集到哈希表

@{ Fore=$Fore; Back=$Back; Newline=$Newline;
   Condition=$Condition; String=$String }

但是,如果用户在调用函数时省略了特定的参数,我希望从哈希表中省略该键。我们的想法是,在经过一些预处理后,我将使用哈希表调用Write-Host,如Write-Host @args。所以我不想要$args["Back"] = $null之类的内容。

显然,我可以通过明确检查每个参数来实现这一点(实际上,我可以吗?如何判断用户是否提供$ Fore?我想,检查$ null是否有效,但它是&#39;不是完全Write-Host相同的行为,但有更紧凑的方法吗?

2 个答案:

答案 0 :(得分:2)

好像你想要的东西(至少哈希表)已经由$ PSBoundParameters为你完成了。

答案 1 :(得分:0)

如果我理解你的问题,你正在寻找你的论点的默认值。如果我错了,请纠正我。

function Add-PromptSection() {
    [CmdletBinding()]
    Param(
        [ConsoleColor]$Fore,
        [ConsoleColor]$Back="Red",
        [Switch]$Newline,
        [Scriptblock]$Condition,
        [String]$String
    )

    Write-Host $args
}

现在,用户可以放心地忽略在哈希表中提供$ back。