একক পাওয়ারশেল স্ক্রিপ্ট প্যারামিটারে একাধিক মান পাস করা


99

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যেখানে আমি সার্ভারের নামটি $ আরগগুলিতে পাস করি।

এইভাবে এই সার্ভার (গুলি) ব্যবহার করে আমি স্টাফগুলি করতে পারি foreach:

.\script.ps1 host1 host2 host3

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

আমি vlan নামক একটি namedচ্ছিক প্যারামিটার যুক্ত করতে চাই। আমি চেষ্টা করেছিলাম:

Param(
    [string]$vlan
)

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

আপনি যদি কোনও -vlanপরামিতি পাস করেন তবে এটি কাজ করে তবে আপনি যদি তা না করেন তবে স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে সর্বশেষ সার্ভারটির নাম নির্ধারণ করে $vlan

সুতরাং, আপনি কীভাবে একক বা একাধিক পরামিতি এবং একটি Sচ্ছিক নামের প্যারামিটারটিকে পাওয়ারশেল স্ক্রিপ্টে পাস করতে পারেন?

আদর্শভাবে, এখানে বৈধ উদাহরণ রয়েছে:

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

উত্তর:


182

সবচেয়ে সহজ উপায় হ'ল দুটি প্যারামিটার ব্যবহার করা: একটি হোস্টের জন্য (একটি অ্যারে হতে পারে), এবং ভ্লানর জন্য একটি।

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

পরিবর্তে

foreach ($i in $args)

তুমি ব্যবহার করতে পার

foreach ($hostName in $Hosts)

যদি কেবল একটি হোস্ট থাকে তবে পূর্বাঞ্চ লুপটি একবারে পুনরাবৃত্তি হবে। স্ক্রিপ্টে একাধিক হোস্টকে পাস করার জন্য, এটিকে হিসাবে পাস করুন:

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

... বা অনুরূপ কিছু।


7
স্ক্রিপ্টটি কীভাবে কল করবেন সেই তথ্য অন্তর্ভুক্ত করার জন্য ধন্যবাদ - আমি প্রায়শই পাওয়ারশেলের মতো ছোট্ট টুকরো মিস করছি।
জানু বুহেলার

23

প্যারামিটারগুলি যুক্তির আগে ইনপুট নেয়। পরিবর্তে আপনার যা করা উচিত তা হ'ল একটি প্যারামিটার যুক্ত করা যা কোনও অ্যারে গ্রহণ করে এবং এটিকে প্রথম অবস্থানের পরামিতি করে। প্রাক্তন:

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

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

তারপরে এটিকে কল করুন:

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

মানগুলির মধ্যে কমা লক্ষ্য করুন। এটি তাদের একটি অ্যারেতে সংগ্রহ করে


20

এটি করার একটি উপায় এই রকম হবে:

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

এটি একাধিক হোস্টকে ফাঁকা স্থান সহ প্রবেশের অনুমতি দেবে।


সত্যিই সুন্দর! দ্বিতীয় প্যারামিটার বৈশিষ্ট্যটি বন্ধ করতে আপনার উদাহরণটি একটি ']' অনুপস্থিত।
সেবাস্তিয়ান এম

4
এই এক সেরা উত্তর হওয়া উচিত।
Іванов

এই উপায়.
CrazyIvan1974

-6

আমি একটি নির্ধারিত স্ক্রিপ্ট কল করি যাকে অবশ্যই এইভাবে সার্ভারের তালিকার সাথে সংযুক্ত হতে হবে:

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

তারপরে স্ক্রিপ্টের ভিতরে:

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

বিভক্ত অপারেটর স্ট্রিংয়ের একটি অ্যারে প্রদান করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.