পাওয়ারশেলে কমান্ড-লাইন আর্গুমেন্ট কীভাবে পরিচালনা করবেন


494

কমান্ড-লাইন আর্গুমেন্টগুলি পরিচালনা করার "সেরা" উপায় কী?

দেখে মনে হয় যে "সেরা" উপায়টি সম্পর্কে বেশ কয়েকটি উত্তর রয়েছে এবং ফলস্বরূপ আমি কীভাবে সহজ কিছু হ্যান্ডেল করব তাতে আটকা পড়েছি:

script.ps1 /n name /d domain

এবং

script.ps1 /d domain /n name.

এমন কোনও প্লাগইন রয়েছে যা এটি আরও ভালভাবে পরিচালনা করতে পারে? আমি জানি আমি এখানে চাকা পুনরুদ্ধার করছি।

স্পষ্টতই আমার কাছে যা আছে তা সুন্দর নয় এবং অবশ্যই এটি "সেরা" নয়, তবে এটি কার্যকর হয় .. এবং এটি খুব খারাপ G

for ( $i = 0; $i -lt $args.count; $i++ ) {
    if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
    if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
    if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
    if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain

উত্তর:


917

আপনি চাকা পুনরুদ্ধার করছেন। সাধারন PowerShell স্ক্রিপ্ট দিয়ে শুরু পরামিতি আছে -মত,script.ps1 -server http://devserver

তারপরে আপনি paramফাইলটির প্রারম্ভিক অংশে সেগুলি পরিচালনা করুন ।

আপনি আপনার প্যারামগুলিতে ডিফল্ট মানগুলিও বরাদ্দ করতে পারেন, যদি উপলভ্য না হয় তবে কনসোল থেকে সেগুলি পড়ুন বা স্ক্রিপ্টের সম্পাদনা বন্ধ করুন:

 param (
    [string]$server = "http://defaultserver",
    [Parameter(Mandatory=$true)][string]$username,
    [string]$password = $( Read-Host "Input password, please" )
 )

স্ক্রিপ্টের ভিতরে আপনি সহজেই পারেন

write-output $server

যেহেতু সমস্ত প্যারামিটারগুলি স্ক্রিপ্ট স্কোপে উপলব্ধ ভেরিয়েবল হয়।

এই উদাহরণস্বরূপ, $serverস্ক্রিপ্টটি ছাড়াই কল করা হলে এটি একটি ডিফল্ট মান পায়, আপনি -usernameপরামিতি বাদ দিলে স্ক্রিপ্টটি বন্ধ হয়ে যায় এবং -passwordবাদ পড়লে টার্মিনাল ইনপুট জিজ্ঞাসা করে ।

আপডেট: আপনি পাওয়ারশেল স্ক্রিপ্টে একটি "পতাকা" (একটি বুলিয়ান ট্রু / মিথ্যা পরামিতি) পাস করতেও পারেন। উদাহরণস্বরূপ, আপনার স্ক্রিপ্টটি কোনও "বল" গ্রহণ করতে পারে যেখানে স্ক্রিপ্টটি আরও যত্নবান মোডে চালিত হয় যখন শক্তি ব্যবহার করা হয় না।

এর জন্য কীওয়ার্ডটি [switch]প্যারামিটারের ধরণ:

 param (
    [string]$server = "http://defaultserver",
    [string]$password = $( Read-Host "Input password, please" ),
    [switch]$force = $false
 )

স্ক্রিপ্টের ভিতরে তখন আপনি এটির সাথে এটি ব্যবহার করবেন:

if ($force) {
  //deletes a file or does something "bad"
}

এখন, স্ক্রিপ্টটি কল করার সময় আপনি এই জাতীয় স্যুইচ / ফ্ল্যাগ প্যারামিটার সেট করতে চান:

.\yourscript.ps1 -server "http://otherserver" -force

আপনি যদি স্পষ্টভাবে বলতে চান যে পতাকাটি সেট করা নেই, তবে এর জন্য একটি বিশেষ বাক্য গঠন রয়েছে

.\yourscript.ps1 -server "http://otherserver" -force:$false

প্রাসঙ্গিক মাইক্রোসফ্ট ডকুমেন্টেশনের লিঙ্কগুলি (পাওয়ারশেল 5.0 এর জন্য; সংস্করণ 3.0 এবং 4.0 লিঙ্কগুলিতেও উপলব্ধ):


58
প্রকৃতপক্ষে পাওয়ারশেলের একটি বড় সুবিধা হ'ল এটি একটি স্ট্যান্ডার্ড প্যারামিটার পার্সিং অবকাঠামো সরবরাহ করে যা ব্যবহার করা সহজ।
কিথ হিল

14
@naivists, PowerShell 2.0 থেকে পরিবর্তে [string]$username = $(throw "-username is required.")বাধ্যতামূলক পরামিতি জন্য সিনট্যাক্স থাকে: [Parameter(Mandatory=$true)][string]$username। এই কৌশলগুলির মধ্যে পার্থক্য সম্পর্কে এখানে আরও তথ্য দেওয়া হয়েছে: ব্লগস.টেকনেট
বি

7
কোনও অর্গ সরবরাহ না করা হলে বাগ থেকে সাবধান থাকুন; পাওয়ারশেল কমান্ড লাইন থেকে কেবল কোনও অতিরিক্ত পাঠ্য গ্রহন করবে: \ thycript.ps1 -server " serv " -প্যাসওয়ার্ড "মাইপাস" টাইপো এটি যাদুতে typ ব্যবহারকারীর নাম 'টাইপো' বরাদ্দ করবে।
শেয়ামাস

4
প্যারাম ব্লকটি ব্যবহার করার ফলে অন্যান্য অনিচ্ছাকৃত পরিণতিগুলি বলে মনে হচ্ছে যদিও: স্ট্যাকওভারফ্লো.com
লোগান

1
@ শিমাস: এটি কোনও বাগ নয়! পাওয়ার প্যাকেজটি যথাযথ প্যারামিটারের নামটি ব্যবহার করে ওভাররাইড না করা হলে প্রদত্ত ক্রমে যুক্তিগুলি প্রক্রিয়াকরণ ও নির্ধারণ করবে, যেমন যদি আপনার প্যারাম ব্লক তালিকাগুলি: $ ব্যবহারকারী $ পাস $ সার্ভারটি ব্যবহার করে এবং আপনি thycript.ps1 abc কার্যকর করেন তবে একটি হবে $ ব্যবহারকারী, বি তে b পাস এবং সি-সার্ভারে সেট করুন, আপনি বিশেষত এগুলি নির্ধারণ করুন! সুতরাং, যদি আপনি বলেন: thycript.ps1 -pass abc, $ পাসটি একটিতে সেট করা হবে, এবং বাকি (নামবিহীন) পরামিতিগুলি পরামিতি ব্লকের তালিকাভুক্ত ক্রমে, অনুপস্থিতদের পূরণ করতে ব্যবহৃত হবে, সুতরাং $ ব্যবহারকারী = বি, $ সার্ভার = সি।
ফার্নান্দো মাদ্রুগা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.