Are Optional Parameters for Methods supported in Powershell 5 Classes

This topic contains 4 replies, has 2 voices, and was last updated by Profile photo of Jeremy Murrah Jeremy Murrah 1 year, 7 months ago.

  • Author
    Posts
  • #30340
    Profile photo of Jeremy Murrah
    Jeremy Murrah
    Participant

    I'm playing around with the latest WMF 5 build doing fun stuff with classes, and I ran across a situation where I'd like to use optional parameters instead of creating a bunch of overloads. I can't find much about this topic either online or in the about_classes help file. Also I'm not a real developer so I could be thinking about this all wrong. This C# reference mentions the use of optional arguments to a method, which I think is what I'd like to do with powershell:

    https://msdn.microsoft.com/en-us/library/dd264739.aspx

    Basically I have a class IB_DNSARecord with a method Get:

    `
    [IB_DNSARecord]::Get($gridmaster,$credential,"wapitest.domain.com")
    `

    This will get the DNS A record that matches that name exactly. Another option would be to do a search that matches any record that is similar rather than exact, and ideally I'd like to do it like this:

    `
    [IB_DNSARecord]::Get($gridmaster,$credential,"wapitest.domain.com","False")
    `

    where the third parameter determines whether or not to do a strict search (True would be the default if not specified). Currently this blows up on me, so it seems like I'd have to do an overload for it and re-use a bunch of code.

    Any ideas?

  • #30342
    Profile photo of Dave Wyatt
    Dave Wyatt
    Moderator

    Not yet, but I believe that's on their list of things to add (and the parser already supports the syntax for assigning values to parameters, which is a bit confusing at this point since the rest of the functionality isn't implemented yet.)

  • #30343
    Profile photo of Jeremy Murrah
    Jeremy Murrah
    Participant

    That explains it, thanks. So if default parameter values don't actually work yet that explains the error I get when trying the overload route. thanks!

    Should I go put feedback on connect or something or is that already in their to do list?

  • #30344
    Profile photo of Dave Wyatt
    Dave Wyatt
    Moderator

    Pretty sure it's already on their to-do list. However, in the meantime, you can always fall back on the old .NET 2.0 way of accomplishing this without too much duplicate code:

    class IB_DNSARecord
    {
        static [IB_DNSARecord] Get([object] $GridMaster, [pscredential] $Credential, [bool] $Strict)
        {
            # do stuff
        }
    
        static [IB_DNSARecord] Get([object] $GridMaster, [pscredential] $Credential)
        {
            return [IB_DNSARecord]::Get($GridMaster, $Credential, $false)
        }
    }
    
  • #30348
    Profile photo of Jeremy Murrah
    Jeremy Murrah
    Participant

    That works great, thanks!

    I also learned if you leave out a parameter you can create a method calling loop and crash the ISE.....

You must be logged in to reply to this topic.