2013-02-27 16 views
40

Sunucu adlarını $ args olarak ilettiğim bir komut dosyası var. Ben foreach kullanarak bu (bunlar) sunucu (lar) için şeyler yapabilirimBirden çok değeri tek bir PowerShell komut dosyasına geçirme

Bu şekilde: Ben vlan adında bir adlandırılmış isteğe bağlı parametreyi eklemek istediğiniz

.\script.ps1 host1 host2 host3 

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

. Ben denedim: Bir -vlan parametre geçirirseniz

Param(
    [string]$vlan 
) 

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

O çalışıyor ancak o zaman yoksa script otomatik $vlan son sunucu adı atar.

Peki, PowerShell komut dosyasına nasıl bir veya daha fazla parametreyi artı isteğe bağlı adlandırılmış bir parametreyi iletebilirsiniz?

İdeal olarak, burada geçerli örnekler şunlardır: ana bilgisayarlar için One (bir dizi olabilir) ve vlan için bir tane:

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

cevap

84

kolay yolu iki parametre kullanmak muhtemelen. Sadece bir ana makine varsa yerine

foreach ($i in $args) 

ait

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

Eğer

foreach ($hostName in $Hosts) 

kullanabilirsiniz, foreach döngüsü sadece bir kez yineleme olacak. Komut dosyasına birden çok ana bilgisayarı aktarmak için, onu bir dizi olarak iletin:

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

... ya da benzer bir şey.

Fatura

+0

Betiği nasıl çağırılacağına dair bilgileri eklediğiniz için teşekkürler - genellikle powershell'deki gibi küçük parçaları kaçırıyorum. –

14

Parametreler, argümanlardan önce girdi alır. Bunun yerine yapmanız gereken, bir diziyi kabul eden ve onu ilk konum parametresi yapan bir parametre eklemektir. örn:

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

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

Sonra gibi çağrı:

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

Bildirim değerleri arasındaki virgül.

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

bölünmüş operatör döndürür: komut dosyası içinde Sonra

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

: Bu benim Server'ın listeye bu şekilde bağlanmalıdır zamanlanmış komut çağrı dizisi

0

bunları toplayan dizesinin dizi yapmak

1

bir yolu şöyle olacaktır:

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

Bu, birden fazla ana bilgisayarın boşluklarla girilmesine izin verir.

İlgili konular