I ran across an interesting PowerShell behavior today thanks to a coworker (hi Matt!).
It involved a function with just a few arguments. When I looked at the syntax something looked off.
I am not going to recreate the exact scenario I found (because it involved a cmdlet written in C#), but I was able to recreate a similar issue using advanced functions.
So consider that you are entering a command and you see an intellisense prompt like this one:
You would rightfully assume that it had 3 parameters.
If you looked at the syntax using Get-Help (or the -? switch) you would see something strange:
Wait…where did the other 2 parameters go?
Using Get-Command get-Thing -syntax shows essentially the same result:
This was the kind of problem I ran into. I was given a cmdlet, and when I looked at the syntax to see the parameters, I didn’t find the parameters I expected. They were there, but they weren’t shown by Get-Command.
The “puzzle” is a bit less confusing when you see the code of the function:
function get-thing { [CmdletBinding()] Param( [Parameter(Position=0)]$parm1, [Parameter(Position=0)]$parm2, [Parameter(Position=0)]$parm3 ) #nothing to see here }
The issue arose from the overlapping position modifiers on the parameters. When those are corrected the issue goes away.
Note: The original instance was a bit stranger. As I mentioned earlier, the cmdlet in question was written in C#. What really surprised me was that Get-Help and Get-Command showed different syntaxes. Get-Help showed all of the parameters, while Get-Command only showed the last one.
Pingback: Dew Drop - January 3, 2019 (#2871) - Morning Dew
Hi,
a draft on these rules :
https://github.com/LaurentDardenne/ParameterSetRules/blob/master/RuleDocumentation/AvoidDuplicateParameterPosition.md