views:

577

answers:

3

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?

+1  A: 

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).

Richard
+1  A: 

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
alex2k8
+3  A: 

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.

zdan