2013-02-27 127 views
40

पर एकाधिक मानों को पास करना मेरे पास एक स्क्रिप्ट है जिसमें मैं $ args में सर्वर नाम (ओं) पास करता हूं।एक एकल PowerShell स्क्रिप्ट पैरामीटर

इस तरह से मैं इस (इन) सर्वर (रों) foreach उपयोग करने के लिए सामान कर सकते हैं:

.\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 पैरामीटर पारित लेकिन स्क्रिप्ट ऑटो $vlan करने के लिए पिछले सर्वर नाम प्रदान करती है अगर तुम तो नहीं है।

तो, आप पावरशेल स्क्रिप्ट में एकल या एकाधिक पैरामीटर और एक वैकल्पिक नाम पैरामीटर कैसे पारित कर सकते हैं?

आदर्श रूप में, यहां मान्य उदाहरण हैं: मेजबान के लिए एक (एक सरणी हो सकता है), और VLAN के लिए एक:

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

उत्तर

84

सबसे आसान तरीका शायद दो पैरामीटर का प्रयोग है।

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

foreach ($i in $args) 

के बजाय

आप

foreach ($hostName in $Hosts) 

उपयोग कर सकते हैं अगर वहाँ केवल एक मेजबान है, foreach पाश केवल एक बार पुनरावृति होगी। स्क्रिप्ट पर एकाधिक होस्ट पास करने के लिए, इसे एक सरणी के रूप में पास करें:

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

... या कुछ समान।

विधेयक

+0

स्क्रिप्ट को कॉल करने के तरीके के बारे में जानकारी शामिल करने के लिए धन्यवाद - मुझे अक्सर शक्तियों में छोटे टुकड़े याद आ रहे हैं। –

14

पैरामीटर तर्कों से पहले इनपुट ले लो। इसके बजाय आपको क्या करना चाहिए एक पैरामीटर जोड़ें जो एक सरणी स्वीकार करता है, और इसे पहले स्थान पैरामीटर बना देता है। पूर्व:

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

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

फिर इसे पसंद फोन:

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

सूचना मूल्यों के बीच अल्पविराम। इससे उन्हें एक सरणी

0

में जमा करता है मैं एक अनुसूचित स्क्रिप्ट जो सर्वर की एक सूची के लिए इस तरह से कनेक्ट करना होगा फोन:

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

फिर स्क्रिप्ट के अंदर:

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

विभाजन ऑपरेटर एक रिटर्न स्ट्रिंग की सरणी

1

एक तरह से यह करने के लिए इस तरह होगा:

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

यह कई होस्टों को रिक्त स्थान के साथ दर्ज करने की अनुमति देगा।