2014-11-25 2 views
0

У меня есть функцияКак использовать параметры переключателя C# в функциях powershell?

getinfo([string]$subcommand, [string]$argument) 

То, что я хотел бы сделать, это позволить аргумент иметь значение «-h» или «-help», что

getinfo hosts -h 

дал бы текст справки для подкоманды «хосты». К сожалению, когда я указываю -h, я думаю, что он не присваивает значение «-h» аргументу $ и вместо этого создает новый аргумент.

Я думал об использовании параметра switch, но не уверен, могу ли я использовать его в функции в сочетании с аргументом $ выше.

Возможно ли это?

+0

Что вы имеете в виду «Параметры переключения C#»? –

ответ

0

Я хотел бы сделать это следующим образом:

getinfo([string]$subcommand, [switch][alias("h")]$Help) { 
    switch ($subcommand) { 
    'hosts' { 
     if ($Help) { 'Usage: getinfo hosts ...'; return } 
     ... 
    } 
    ... 
    } 
} 

Все аргументы не соответствующие параметра автоматически сохраняются в переменной $args, так что вы на самом деле не нужен параметр $argument. У этого есть преимущество (или недостаток, в зависимости от вашей точки зрения), что он принимает даже аргументы, которые PowerShell будет интерпретировать как параметры. Пример:

PS C:\>function getinfo($subcommand, [switch]$Help, $argument) { 
>> if ($Help) { 'help' } 
>> $argument 
>>} 
>> 
PS C:\>getinfo 'a' 'b' 
b 
PS C:\>getinfo 'a' -x 
PS C:\>getinfo 'a' 'b' -h 
help 
b 
PS C:\>getinfo 'a' -x -h 
help 
PS C:\>function getinfo($subcommand, [switch]$Help) { 
>> if ($Help) { 'help' } 
>> $args[0] 
>>} 
>> 
PS C:\>getinfo 'a' 'b' 
b 
PS C:\>getinfo 'a' -x 
-x 
PS C:\>getinfo 'a' 'b' -h 
help 
b 
PS C:\>getinfo 'a' -x -h 
help 
-x
+0

Это отлично поработало. Спасибо. У меня есть информация ([string] $ subcommand, [string] $ argument, [string] $ filter, [switch] [alias ("h")] $ help). Работала отлично, потому что, пока -h, я в бизнесе. Еще раз спасибо. – anoopb

5

Отступив немного, вы пытаетесь заставить команду парадигму на PowerShell, что это не то, что я назвал бы идиоматических PowerShell. Почему бы не создать несколько функций, каждый со своей помощью, например. Get-HostInfo, Get-FooInfo и т.д. Затем вы можете использовать PowerShell встроенный в поддержку документации, например:

<# 
.SYNOPSIS 
    Short description 
.DESCRIPTION 
    Long description 
.PARAMETER Host 
    Name of the host. 
.EXAMPLE 
    Example of how to use this cmdlet 
.EXAMPLE 
    Another example of how to use this cmdlet 
#> 
function Get-HostInfo($host) { ... } 

Это поддерживает помощь во всех отношениях пользователей PowerShell ожидают:

man Get-HostInfo 
man Get-HostInfo -Example 
man Get-HostInfo -Parameter Host 
Get-HostInfo -? 
+1

Встроенная документация - это способ поиска справки. Вы хотите иметь возможность набирать 'Get-Help', и команда должна выдать необходимый текст справки. Написание собственного кода для этого нарушает эту идею. Пусть PowerShell сделает то, на что это хорошо. – kevmar

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