2013-09-17 2 views
4

Мне нелегко об этом думать. если бы я хотел, чтобы все объявленные параметры требовали явного именования, когда они были установлены, и я хотел подобрать что-либо, не названное из переменной $ args, как бы я это сделал?Как заставить объявленные параметры требовать явного именования?

Если мой сценарий объявил следующие параметры:

param($installdir, $compilemode, $whatever) 

затем передать список файлов (в этом случае я не хочу, чтобы указать директорию установки, режим компиляции и т.д.), первые три параметры будут сожрать мои аргументы. Таким образом, я хотел бы передать:

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

и получить все 4 строки появляются $ арг, или, альтернативно, звоните:

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

и получить значения для $ compilemode и $ INSTALLDIR с $ аргументах, содержащих 2 файлы ... как я могу это сделать?

+0

http://blogs.technet.com/b/heyscriptingguy/archive/2013/04/11/named -arguments-for-powershell-functions-best-practices.aspx –

+0

Будет ли фиксировано положение каждого параметра? –

+0

Я не уверен, что меня волнует, будут ли объявленные параметры фиксированными в позиции, так как вызывающий должен будет их назвать (это то, на что я надеюсь) – ekkis

ответ

4

ОК, понял. объявить, как это:

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

благодаря @latkin, который уже ответил на этот вопрос по адресу: Powershell non-positional, optional params

Смежные вопросы