2016-10-05 1 views
0

이 내가하는 작업입니다 스크립트가 작동하려면 나는이 스크립트와 함께 할 찾고 무엇 메뉴 기능사용 스위치 메뉴 패스 인수가

DO { 
$selection = Read-Host ">" 
SWITCH ($selection) { 
    '-h' {GET_HELP} 
    'refresh' {REFRESH_LIST} 
    'start' {INSTANCE_START} 
    'stop' {'STOPPING INTANCE'} 
    'q' {BREAK} 
    DEFAULT {'ENTER -h FOR HELP'} 
}} until ($selection -eq 'q') 

을 가지고하는 것은 시작하고 가상 머신을 중지합니다. 그것은 모든 시스템을 나열하고 메뉴에서 나는 다음과 같이 명령을 실행하는 사용자를 싶습니다

start <hostName> 

start 스위치 메뉴의 명령을 항상 다를 것이다 <hostName>되고 전달되는 인수입니다 INSTANCE_START 함수에 전달합니다. 내 첫번째 생각은 split을 사용하여 입력 된 문자열을 분할하고 분할 참조의 첫 번째 부분은 어떤 스위치 케이스로 가고 두 번째 부분은 함수에 전달 된 변수가되도록하는 것입니다. 이것이 최선의 방법입니까? 또는이 메뉴와 메뉴에 더 쉽게 접근 할 수 있습니까?

답변

1

Switch 문은 동작을 수정 자체 스위치가 있습니다.
사용 -wildcard과 변수 부분 대신에 *을 추가

switch -wildcard ($selection) { 
    '-h'  { GET_HELP; break } 
    'refresh' { REFRESH_LIST; break } 
    'start *' { INSTANCE_START; break } 
    'stop *' { 'STOPPING INTANCE'; break } 
    'q'  { break } 
    default { 'ENTER -h FOR HELP' } 
} 

스위치는 대소 문자를 구분 PS (-eq, -ne, -like, -match)의 모든 기본 문자열 연산자와 같은 것입니다
때문에 필요에가 없습니다 대소 문자를 변경하십시오.

+0

그래서 와일드 카드는'start'라는 단어로 시작하는'$ selection '이'INSTANCE_START' 함수로 넘어갈 수있게하지만 입력의 두 번째 부분 인'Host Name '맞지? – themackyo

+0

물론. 스위치는 값을 비교 만합니다. – wOxxOm

0

당신은 스위치의 경우 표현식을 사용할 수 있습니다 :

switch($selection.ToLower()){ 
    {$_ -like "start *"} { INSTANCE_START $($_.replace("start ","")) } 
}