Paul Moore
Paul Moore

Reputation: 7229

How do I package powershell advanced function args into a hashtable

I have a function

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

    $args = <something>
}

What I want to do is to collect the function arguments into a hashtable

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

However, if the user omitted a particular argument when calling the function, I want that key to be omitted from the hashtable. The idea is that after a bit of preprocessing, I will call Write-Host with the hashtable, as Write-Host @args. So I don't want something like $args["Back"] = $null in there.

Obviously I can do this by explicitly checking each argument (actually, can I? How do I tell if the user didn't supply $Fore? Checking for $null will work, I guess, but it's not quite the same behaviour as Write-Host) but is there a more compact approach?

Upvotes: 0

Views: 171

Answers (2)

mjolinor
mjolinor

Reputation: 68273

It seems like what you're wanting (at least the hash table) is already being done for you by $PSBoundParameters.

Upvotes: 2

ravikanth
ravikanth

Reputation: 25810

if I understand your question, you are looking for default values for your arguments. Please correct me if I am wrong.

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

    Write-Host $args
}

Now, the user can safely ignore providing $back in hashtable.

Upvotes: 0

Related Questions