Reputation: 10226
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
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