How do I force declared parameters to require explicit naming?

powershell

Solution

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

Problem

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?

Original source

Related problems