2013-02-27 5 views
40

$ args에 서버 이름을 전달하는 스크립트가 있습니다. 내가 foreach를 사용하여이 (이) 서버 (들)에 물건을 할 수단일 PowerShell 스크립트 매개 변수에 여러 값 전달

이 방법 : 나는 VLAN라는 이름이 선택적 매개 변수를 추가 할

.\script.ps1 host1 host2 host3 

foreach ($i in $args) 
{ 
    Do-Stuff $i 
} 

. 나는 시도했다 : 당신이 -vlan 매개 변수를 전달하는 경우

Param(
    [string]$vlan 
) 

foreach ($i in $args) 
{ 
    Write-Host $i 
} 
Write-Host $vlan 

그것은 작동하지만 다음하지 않으면 스크립트 자동 $vlan에 마지막으로 서버 이름을 지정합니다.

그래서 단일 또는 다중 매개 변수와 선택적 명명 된 매개 변수를 PowerShell 스크립트에 전달할 수 있습니까?

이상적으로, 여기에 유효한 예 : 호스트에 대한 한 (배열을 할 수 있습니다) 및 VLAN에 대한 하나

.\script.ps1 host1 
.\script.ps1 host1 host2 host3 
.\script.ps1 host1 host2 -vlan office 

답변

84

가장 쉬운 방법은 두 개의 매개 변수를 사용하는 아마. 하나의 호스트 만있는 경우 대신

foreach ($i in $args) 

param([String[]] $Hosts, [String] $VLAN) 

당신이

foreach ($hostName in $Hosts) 

를 사용할 수 있으며, foreach 루프는 한 번만 반복됩니다. 스크립트에 여러 호스트를 전달하려면 배열로 전달하십시오.

myScript.ps1 -Hosts host1,host2,host3 -VLAN 2 

... 또는 이와 비슷한 이름으로 배열로 전달하십시오.

+0

스크립트를 호출하는 방법에 대한 정보를 포함 해 주셔서 감사합니다. 저는 종종 powershell에서 그처럼 작은 조각들을 놓치고 있습니다. –

14

매개 변수는 인수 앞에 입력됩니다. 대신 배열을 받아들이는 매개 변수를 추가하고 첫 번째 위치 매개 변수로 지정하십시오. 예 :

param(
    [Parameter(Position = 0)] 
    [string[]]$Hosts, 
    [string]$VLAN 
    ) 

foreach ($i in $Hosts) 
{ 
    Do-Stuff $i 
} 

는 그 다음 원하는 전화 :

.\script.ps1 host1, host2, host3 -VLAN 2 

공지 값 사이의 쉼표.

param($list_of_servers) 
... 
Connect-Viserver $list_of_servers.split(",") 

분할 연산자는를 반환 스크립트 내에서 다음

Powershell.exe -File "YourScriptPath" "Par1,Par2,Par3" 

: 이것은 내가 서버의 목록에이 방법을 연결해야 예약 된 스크립트를 호출 배열

0

에서 그들을 수집 문자열 배열

1

한 가지 방법은 다음과 같습니다.

param(
     [Parameter(Position=0)][String]$Vlan, 
     [Parameter(ValueFromRemainingArguments=$true)[String[]]$Hosts 
    ) ... 

이렇게하면 여러 호스트를 공백으로 입력 할 수 있습니다.

관련 문제