ekkis
ekkis

Reputation: 10226

How do I force declared parameters to require explicit naming?

I'm having a hard time thinking this through. if I wanted all declared parameters to require explicit naming when they're set and I wanted to pick up anything unnamed from the $args variable, how would I do it?

If my script declared the following parameters:

param($installdir, $compilemode, $whatever) 

then passing a list of files (in which case I don't want to specify the installation directory, a compile mode, etc.) the first three parameters would gobble my arguments. So, I would like to pass:

c:\> MyScript file-1.cs file-2.cs file-3.cs file-4.cs 

and get all 4 strings appear $args, or alternatively, call:

c:\> MyScript -CompileMode simple file-1.cs -InstallDir c:\temp file-2.cs

and get values for $compilemode and $installdir with $args containing 2 files... how can I do that?

Upvotes: 5

Views: 2442

Answers (1)

ekkis
ekkis

Reputation: 10226

ok, figured it out. declare like this:

param(
   $installdir, 
   $compilemode, 
   $whatever, 
   [Parameter(Position=0, ValueFromRemainingArguments=$true)] $args
   )

thanks to @latkin, who had already answered this at: Powershell non-positional, optional params

Upvotes: 6

Related Questions