Wednesday, April 20, 2011

How can I know that PowerShell function parameter is omitted

Consider such function:

function Test($foo, $bar)
{
  ...
}

We can call it:

Test -foo $null
Test

How can I know when the -foo was omitted, and when it was $null?

From stackoverflow
  • Unless it is possible to trap exceptions thrown from param statement (and since param has to be the first, I can't see this would work):

    function {
      trap { "Something failed" }
      param($foo = $(throw "Foo not specified"))
      ...
    

    Then I can't see a way (you get the same thing with [switch] parameters: default or explicitly -mySwitch:$false).

  • The solution based on Richard's idea:

    $missed = "{716C1AD7-0DA6-45e6-854E-4B466508EB96}"
    
    function Test($foo = $missed, $bar)
    {
        if($foo -eq $missed) {
            Write-Host 'Missed'
        }
        else
        {
            Write-Host "Foo: $foo"
        }
    }
    
    Test -foo $null
    Test
    
  • If you are using Powershell V2, you can use the $PSBoundParameters variable which is a dictionary that lists all bound parameters at current scope.

    See this blog post that discusses it.

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.