2012-09-17 5 views
0

나는 -h 값을 전달하지 않고 -h 매개 변수와 함께 사용하고자합니다 : 그러나 나머지는 어떻게 유지하고 싶은가요 ... 즉, 선택 사항입니다. 매개 변수의 별명을 지정하지 않고 값을 제공해야하는 경우가 아니면powershell에서 별칭을 사용하는 빈 매개 변수

Param(
$BadParam, 
[alias("h")][String]$Help, 
[alias("s")][String]$Server,  
[alias("d")][String]$DocRoot, 
[alias("c")][String]$Commit, 
[alias("b")][String]$Branch 
) 

예를 들어 (더 나은의 부족) :

if(!$Help) 
{ 
Write-Host "Here's the menu for how it works bro." 
} 

if($Help) 
{ 
Write-Host "Here's more info on that particular thing from the menu." 
} 

것은 나는이 쉘에서 행동을 기대 방법 :

-> script.ps1 -s test -h 
-> Here's the menu for how it works bro. 

-> script.ps1 -s test -h server 
-> Here's more info on that particular thing from the menu. 

-> script.ps1 -s -h server 
-> You are missing a value for -e. 

답변

3

파워 쉘 정말이 같은 것을 지원하지 않습니다. [switch] 매개 변수는 값없이 지정할 수 있거나 [string] 매개 변수를 가질 수 있습니다. 매개 변수는 완전히 없거나 값이 제공되어야합니다. 결석을 지원하고 값없이 지정되며 값으로 지정되는 매개 변수를 가질 수 없습니다.

한 가지 대안은 [string]이 되겠지만 사용자는 $null을 전달하지만 그 종류는 끔찍합니다.

또 다른 극단적 인 대안은 매개 변수 위치가있는 몇 가지 속임수입니다. -Help[switch] 일 수 있으며, 그 다음에 인 다른 매개 변수 -ThingHelp이있을 수 있습니다. 그런 다음 -Help 'foo'과 같은 호출은 $Help'foo'으로 설정하지 않고 $Help 스위치를 설정하고 $ThingHelp = 'foo'을 지정합니다.

function ParamTest 
{ 
    param(
    [Parameter(Position = 0)] 
    [switch]$Help, 

    [Parameter(Position = 1)] 
    [string] $ThingHelp 

) 

    "Help is [$help]" 
    "ThingHelp is [$thingHelp]" 
} 

는 다음을 지원합니다 : 그들은 연약하고 혼란 모두 경향이 있기 때문에이 같은

PS> ParamTest    # $help = $false, $thingHelp = null 
PS> ParamTest -Help   # $help = $true, $thingHelp = null 
PS> ParamTest -Help 'foo' # $help = $true, $thingHelp = 'foo' 

해킹은 일반적으로하지 좋은 생각 이다. 평균 powershell 사용자에게 스크립트를 줄 수 있어야하며 매개 변수의 의미와 사용법을 즉시 이해해야합니다. 수천 개의 다른 cmdlet 중 아무 것도 수행하지 않는 여러 가지 사용자 지정 항목을 설명해야하는 경우 모든 사람의 시간을 낭비 할 것입니다.

그리고 말 그대로 어떤 종류의 도움/사용 시스템을 구현하고 있다면, 그만하십시오! Powershell은 무료로 포괄적 인 도움말 시스템을 제공합니다. 모든 매개 변수를 문서화하고, 예제 코드 등을 추가 비용없이 제공 할 수 있습니다. comment-based help에 대한 설명서를 참조하십시오.

관련 문제