আমি কীভাবে পাওয়ারশেলের কোনও ফাংশনে একাধিক পরামিতিগুলি পাস করব?


438

আমার যদি এমন কোনও ফাংশন থাকে যা একাধিক স্ট্রিং প্যারামিটার গ্রহণ করে তবে প্রথম প্যারামিটারটি এতে সমস্ত ডেটা নির্ধারিত হয়ে গেছে বলে মনে হয় এবং অবশিষ্ট পরামিতিগুলি খালি হিসাবে পাস করা হয়।

একটি দ্রুত পরীক্ষার স্ক্রিপ্ট:

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC", "DEF")

উত্পাদিত আউটপুট হয়

$arg1 value: ABC DEF
$arg2 value: 

সঠিক আউটপুটটি হওয়া উচিত:

$arg1 value: ABC
$arg2 value: DEF

এটি একাধিক মেশিনে v1 এবং v2 এর মধ্যে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে, সুতরাং স্পষ্টতই, আমি কিছু ভুল করছি। কেউ কি ঠিক বলতে পারেন?


3
আপনি কেবল Test "ABC" "DEF"
এটির জন্য

উত্তর:


576

পাওয়ারশেলের (সমস্ত সংস্করণ) ফাংশনে কলগুলির পরামিতিগুলি স্থান-বিচ্ছিন্ন, কমা দ্বারা পৃথক নয় । এছাড়াও, প্রথম বন্ধনী সম্পূর্ণরূপে অপ্রয়োজনীয় এবং পাওয়ারশেল ২.০ (বা তার পরে) এ পার্সিং ত্রুটি ঘটায়Set-StrictMode সক্রিয় । প্যারেন্টেসাইজড আর্গুমেন্টগুলি কেবলমাত্র নেট পদ্ধতিতে ব্যবহৃত হয়।

function foo($a, $b, $c) {
   "a: $a; b: $b; c: $c"
}

ps> foo 1 2 3
a: 1; b: 2; c: 3

20
অবশেষে আমার মনের মধ্যে এটি আটকে রাখতে সাহায্যকারী সবচেয়ে গুরুত্বপূর্ণ জিনিসটি হ'ল শেষ বাক্য: "প্যারেন্টেসাইসড আর্গুমেন্টগুলি কেবলমাত্র নেট পদ্ধতিতে ব্যবহৃত হয়।"
অ্যাশলে

1
আমি প্যারানথেসিস এবং কমা পৃথকীকরণ ব্যবহার পছন্দ করি .. পাওয়ারশেলের মধ্যে এটি করা কি সম্ভব?
সাম ইয়ি

8
@ সাম্যি নং (1,2,3)একটি ফাংশনে একটি পাস করা কার্যকরভাবে অ্যারে হিসাবে বিবেচিত হয়; একক যুক্তি আপনি যদি ওও পদ্ধতি শৈলীর আর্গুমেন্ট ব্যবহার করতে চান তবে মডিউলগুলি ব্যবহার করুন:$m = new-module -ascustomobject { function Add($x,$y) { $x + $y } }; $m.Add(1,1)
x0n

4
Powershellশেল ভাষা এবং শেল ভাষার পক্ষে টোকেন বিভাজক হিসাবে স্পেস ব্যবহার করা সাধারণ। আমি বলবো না Powershellএখানে বিভিন্ন হচ্ছে, এটা ঠিক মত অন্যান্য সিস্টেম ডিফল্ট শেল সঙ্গে সঙ্গতিপূর্ণ এর cmd, sh, bash, ইত্যাদি
পানোত্সব গরিষ্ঠ

270

ইতিমধ্যে সঠিক উত্তর সরবরাহ করা হয়েছে, তবে এই সমস্যাটি সূক্ষ্মতা বুঝতে আগ্রহীদের জন্য কিছু অতিরিক্ত বিশদ পাওয়ার জন্য যথেষ্ট পরিমাণে প্রচলিত বলে মনে হচ্ছে।

আমি এটিকে কেবল একটি মন্তব্য হিসাবে যুক্ত করতাম, তবে আমি একটি চিত্র অন্তর্ভুক্ত করতে চেয়েছিলাম - আমি পাওয়ারশেল ফাংশনগুলিতে আমার দ্রুত রেফারেন্স চার্টটি ছিঁড়ে ফেলেছি। এটি ধরে রাখে ফাংশন চ এর স্বাক্ষর f($a, $b, $c):

একটি ফাংশন কলের সিনট্যাক্স ক্ষতি

সুতরাং, কেউ স্থান দ্বারা পৃথক অবস্থানগত পরামিতি বা অর্ডার-স্বতন্ত্র নামযুক্ত পরামিতিগুলির সাথে একটি ফাংশন কল করতে পারে । অন্যান্য সমস্যাগুলি প্রকাশ করে যে আপনাকে কমা, প্রথম বন্ধনী এবং এর জ্ঞাত হতে হবে সাদা স্থানের ।

আরও পড়ার জন্য, নিবন্ধটি আমার খরচের খরগোশটি দেখুন: পাওয়ারশেল পাইপলাইন, ফাংশন এবং পরামিতিগুলির মধ্যে একটি স্টাডি । নিবন্ধটিতে দ্রুত রেফারেন্স / ওয়াল চার্টের একটি লিঙ্ক রয়েছে।


4
আরও ভার্জোজ সিনট্যাক্সের সাথে প্রতিটি প্যারামিটারকে কল করে এবং এটিকে একটি মূল্য নির্ধারণের সাথে ব্যাখ্যাটি সত্যই এতে সিমেন্ট করে দেয় Thanks ধন্যবাদ!
কনস্টান্টাইনেকে

7
ধন্যবাদ, আমি কী ভুল করছি তা বুঝতে না পেরে এটি আমাকে মানসিকভাবে চালিত করছিল। অবশেষে আমি যখন এটি ঠিক করেছি তখন আমি এই আচরণের ব্যাখ্যার জন্য ক্ষুধার্ত ছিলাম।
বিএসএফএইচ

1
একটি উত্তর হিসাবে পোস্ট করার জন্য ধন্যবাদ। কিছু ভুল কেন জেনে রাখা ঠিক ততটা গুরুত্বপূর্ণ যেটি ভুল।
গ্যাভিন ওয়ার্ড

4
এটি একটি আরও ভাল উত্তর। এটা আরও উপরে করা উচিত।
মার্ক বার্টেনশো

53

এখানে কিছু ভাল উত্তর আছে, তবে আমি কয়েকটি বিষয় উল্লেখ করতে চাই। ফাংশন প্যারামিটারগুলি আসলে এমন এক জায়গা যেখানে পাওয়ারশেল জ্বলজ্বল করে। উদাহরণস্বরূপ, আপনি এর মতো উন্নত ফাংশনে নাম বা অবস্থানগত পরামিতি থাকতে পারেন:

function Get-Something
{
    Param
    (
         [Parameter(Mandatory=$true, Position=0)]
         [string] $Name,
         [Parameter(Mandatory=$true, Position=1)]
         [int] $Id
    )
}

তারপরে আপনি প্যারামিটারের নাম নির্দিষ্ট করে এটি কল করতে পারেন, বা আপনি কেবলমাত্র অবস্থানগত পরামিতি ব্যবহার করতে পারেন, কারণ আপনি এগুলি স্পষ্টভাবে সংজ্ঞায়িত করেছেন। সুতরাং এর যে কোনও একটি কাজ করবে:

Get-Something -Id 34 -Name "Blah"
Get-Something "Blah" 34

Nameদ্বিতীয়টি প্রদান করা সত্ত্বেও প্রথম উদাহরণটি কাজ করে , কারণ আমরা স্পষ্টভাবে প্যারামিটারের নামটি ব্যবহার করেছি। দ্বিতীয় উদাহরণটি পজিশনের উপর ভিত্তি করে কাজ করে, তবে Nameএটি প্রথম হওয়া দরকার। যখন সম্ভব হয়, আমি সর্বদা অবস্থানগুলি সংজ্ঞায়িত করার চেষ্টা করি যাতে উভয় বিকল্প উপলব্ধ।

পাওয়ারশেলের পরামিতি সেটগুলি সংজ্ঞায়িত করার ক্ষমতাও রয়েছে। এটি পদ্ধতি ওভারলোডিংয়ের জায়গায় এটি ব্যবহার করে এবং আবার বেশ কার্যকর:

function Get-Something
{
    [CmdletBinding(DefaultParameterSetName='Name')]
    Param
    (
         [Parameter(Mandatory=$true, Position=0, ParameterSetName='Name')]
         [string] $Name,
         [Parameter(Mandatory=$true, Position=0, ParameterSetName='Id')]
         [int] $Id
    )
}

এখন ফাংশনটি হয় একটি নাম, বা একটি আইডি নেবে, তবে উভয়ই নয়। আপনি এগুলি অবস্থানগতভাবে বা নামে ব্যবহার করতে পারেন। যেহেতু এগুলি ভিন্ন ধরণের, পাওয়ারশেল এটিকে খুঁজে বের করবে। সুতরাং এই সব কাজ করবে:

Get-Something "some name"
Get-Something 23
Get-Something -Name "some name"
Get-Something -Id 23

আপনি বিভিন্ন পরামিতি সেটগুলিতে অতিরিক্ত পরামিতিগুলিও বরাদ্দ করতে পারেন। (এটি স্পষ্টতই একটি চমত্কার প্রাথমিক উদাহরণ ছিল)) ফাংশনের অভ্যন্তরে, আপনি নির্ধারণ করতে পারবেন কোন প্যারামিটার সেটটি $ PSCmdlet.ParameterSetName বৈশিষ্ট্যের সাথে ব্যবহৃত হয়েছিল। উদাহরণ স্বরূপ:

if($PsCmdlet.ParameterSetName -eq "Name")
{
    Write-Host "Doing something with name here"
}

তারপরে, সম্পর্কিত সাইড নোটে, পাওয়ারশেলে প্যারামিটারের বৈধতাও রয়েছে। এটি আমার প্রিয় পাওয়ারশেল বৈশিষ্ট্যগুলির মধ্যে একটি এবং এটি আপনার ফাংশনের অভ্যন্তরীণ কোডটিকে খুব পরিষ্কার করে। আপনি ব্যবহার করতে পারেন অসংখ্য বৈধতা আছে। উদাহরণ দুটি:

function Get-Something
{
    Param
    (
         [Parameter(Mandatory=$true, Position=0)]
         [ValidatePattern('^Some.*')]
         [string] $Name,
         [Parameter(Mandatory=$true, Position=1)]
         [ValidateRange(10,100)]
         [int] $Id
    )
}

প্রথম উদাহরণে, ValidatePattern একটি নিয়মিত অভিব্যক্তি গ্রহণ করে যা সরবরাহিত প্যারামিটারটি আপনি যা প্রত্যাশা করছেন তার সাথে মেলে তা নিশ্চিত করে। যদি এটি না হয় তবে একটি अंतर्জ্ঞাত ব্যতিক্রম ছুঁড়ে দেওয়া হবে, আপনাকে ভুলটি ঠিক কী বলেছে। সুতরাং এই উদাহরণে, 'কিছু' ভাল কাজ করবে, তবে 'গ্রীষ্ম' বৈধতা পাস করবে না।

ValidateRange নিশ্চিত করে যে কোনও পূর্ণসংখ্যার জন্য প্যারামিটার মানটি আপনি যে পরিসরের জন্য প্রত্যাশা করেন তার মধ্যে রয়েছে। সুতরাং 10 বা 99 কাজ করবে তবে 101 ব্যতিক্রম করবে।

আর একটি দরকারী হ'ল ভ্যালিডেটসেট, যা আপনাকে স্পষ্টভাবে গ্রহণযোগ্য মানগুলির একটি অ্যারে সংজ্ঞায়িত করতে দেয়। অন্য কিছু প্রবেশ করা হলে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে। এছাড়াও অন্যান্য রয়েছে, তবে সম্ভবত সবচেয়ে কার্যকর একটি হল ভ্যালিডেটস্ক্রিপ্ট। এটি একটি স্ক্রিপ্ট ব্লক নেয় যা অবশ্যই must সত্যের কাছে মূল্যায়ন করতে পারে তাই আকাশ সীমাবদ্ধ। উদাহরণ স্বরূপ:

function Get-Something
{
    Param
    (
         [Parameter(Mandatory=$true, Position=0)]
         [ValidateScript({ Test-Path $_ -PathType 'Leaf' })]
         [ValidateScript({ (Get-Item $_ | select -Expand Extension) -eq ".csv" })]
         [string] $Path
    )
}

এই উদাহরণে, আমরা নিশ্চিত হয়েছি যে কেবলমাত্র $ পাথ বিদ্যমান, তবে এটি একটি ফাইল, (ডিরেক্টরিতে বিপরীতে) এবং এর একটি .csv এক্সটেনশন রয়েছে। (script _ আপনার স্ক্রিপ্টব্লকের ভিতরে থাকা অবস্থায় প্যারামিটারকে বোঝায়)) সেই স্তরটি যদি প্রয়োজন হয় তবে আপনি আরও বৃহত্তর, বহু-লাইন স্ক্রিপ্ট ব্লকেও পাস করতে পারেন, বা আমি এখানে যেমন করেছি একাধিক স্ক্রিপ্টব্লক ব্যবহার করতে পারি। এটি অত্যন্ত কার্যকর এবং সুন্দর পরিষ্কার ফাংশন এবং স্বজ্ঞাত ব্যতিক্রমগুলির জন্য তোলে।


3
My_Function -NamedParamater "ParamValue"ফাংশন কল শৈলী প্রদর্শনের জন্য +1 । এটি এমন একটি প্যাটার্ন যা আরও পিএস স্ক্রিপ্ট কোডটি পাঠযোগ্যতার জন্য অনুসরণ করা উচিত।
মিস্টার_টম

46

আপনি বন্ধনী ছাড়াই এবং বিভাজক হিসাবে কমা ব্যবহার না করে পাওয়ারশেল ফাংশনগুলি কল করেন। ব্যবহার করার চেষ্টা করুন:

test "ABC" "DEF"

পাওয়ারশেলে কমা (,) একটি অ্যারে অপারেটর, যেমন

$a = "one", "two", "three"

এটি $aতিনটি মান সহ একটি অ্যারেতে সেট করে।


16
Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test "ABC" "DEF"

11

আপনি যদি কোনও সি # / জাভা / সি ++ / রুবি / পাইথন / পিক-এ-ল্যাঙ্গুয়েজ-এই-সেঞ্চুরির বিকাশকারী এবং আপনি আপনার ফাংশনটি কমা দিয়ে কল করতে চান, কারণ এটি আপনি সর্বদা করেছেন, তবে আপনার কিছু প্রয়োজন এটার মত:

$myModule = New-Module -ascustomobject { 
    function test($arg1, $arg2) { 
        echo "arg1 = $arg1, and arg2 = $arg2"
    }
}

এখন কল করুন:

$myModule.test("ABC", "DEF")

এবং আপনি দেখতে পাবেন

arg1 = ABC, and arg2 = DEF

জাভা, সি ++, রুবি এবং পাইথন এই শতাব্দীর নয় (কেবল সি #), গ্রেগরিয়ান ক্যালেন্ডার (যদিও কেউ কেউ অন্যের চেয়ে বেশি বিকশিত হয়েছে ) ধরে ধরে না ।
পিটার মর্টেনসেন

হেহ। @ পিটারমোর্টেনসেন আপনার যুক্তি হ'ল আমাকে "এই শতাব্দীর বা শেষের ভাষাটি বেছে নিন" বলতে হবে? :-)
রায়ান শিলিংটন

10

আপনি যদি না জানেন (বা যত্ন) ফাংশনে আপনি কত যুক্তি দিয়ে যাবেন, আপনি খুব সাধারণ পদ্ধতির মতো ব্যবহার করতে পারেন;

কোড :

function FunctionName()
{
    Write-Host $args
}

এটি সমস্ত যুক্তি মুদ্রণ করবে। উদাহরণ স্বরূপ:

FunctionName a b c 1 2 3

আউটপুট

a b c 1 2 3

বাহ্যিক কমান্ডগুলি ব্যবহার করে এমন অনেকগুলি (এবং optionচ্ছিক) প্যারামিটার থাকতে পারে এমন ফাংশন তৈরি করার সময় আমি এটি বিশেষভাবে দরকারী বলে মনে করি, তবে সিনট্যাক্স ত্রুটি ইত্যাদির প্রতিক্রিয়া জানাতে উক্ত আদেশের উপর নির্ভর করে etc.

এখানে আরেকটি বাস্তব-জগতের উদাহরণ দেওয়া হয়েছে (ট্রেসার্ট কমান্ডের একটি ক্রিয়াকলাপ তৈরি করা, যা আমি ছাঁটা নামটি মনে করে ঘৃণা করি);

কোড :

Function traceroute
{
    Start-Process -FilePath "$env:systemroot\system32\tracert.exe" -ArgumentList $args -NoNewWindow
}

7

যদি তুমি চেষ্টা কর:

PS > Test("ABC", "GHI") ("DEF")

তুমি পাও:

$arg1 value: ABC GHI
$arg2 value: DEF

সুতরাং আপনি দেখতে পাচ্ছেন যে প্রথম বন্ধনীগুলি পরামিতিগুলি পৃথক করে


যদি তুমি চেষ্টা কর:

PS > $var = "C"
PS > Test ("AB" + $var) "DEF"

তুমি পাও:

$arg1 value: ABC
$arg2 value: DEF

এখন আপনি বন্ধনীগুলির কিছু তাত্ক্ষণিক উপযোগিতা পেতে পারেন - একটি স্থান পরবর্তী প্যারামিটারের জন্য বিভাজক হয়ে উঠবে না - পরিবর্তে আপনার কাছে একটি alভাল ফাংশন রয়েছে।


4
পেরেনগুলি পৃথক প্যারামিটার দেয় না। তারা অ্যারে সংজ্ঞা দেয়।
n0rd

1
পেরেন কোনও অ্যারে সংজ্ঞায়িত করেন না, তারা একটি গোষ্ঠী সংজ্ঞায়িত করেন, যা পাওয়ারশেল একটি অ্যারে হিসাবে ব্যাখ্যা করতে পারে। অ্যারেগুলির চিহ্ন (এ সঙ্গে সংজ্ঞায়িত করা হয় @) নেতৃস্থানীয় বন্ধ করার আগে, এটা খালি অ্যারে মত: @(); বা দুই সংখ্যার এই অ্যারের: @(1, 2)
ভার্টিগোয়ের

5

কারণ এই একটি ঘন দেখা প্রশ্ন হল, আমি যে একটি PowerShell ফাংশন ব্যবহার করা উচিত উল্লেখ করতে চান অনুমোদিত ক্রিয়া ( ক্রিয়া-বিশেষ্য ফাংশনের নাম হিসাবে)। নামের ক্রিয়া অংশটি সেমিডলেট সম্পাদন করে এমন ক্রিয়া চিহ্নিত করে। নামের বিশেষ্য অংশটি সত্তাটি চিহ্নিত করে যার উপরে ক্রিয়াটি করা হয়। এই নিয়ম সরল করে উন্নত পাওয়ারশেল ব্যবহারকারীদের জন্য আপনার সেমিডলেট ব্যবহার করে if

এছাড়াও, আপনি প্যারামিটার বাধ্যতামূলক এবং প্যারামিটারের অবস্থানের মতো বিষয়গুলি নির্দিষ্ট করতে পারেন :

function Test-Script
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true, Position=0)]
        [string]$arg1,

        [Parameter(Mandatory=$true, Position=1)]
        [string]$arg2
    )

    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

পরামিতিটি ফাংশনে পাস করার জন্য আপনি হয় অবস্থানটি ব্যবহার করতে পারেন :

Test-Script "Hello" "World"

অথবা আপনি প্যারামিটারের নামটি উল্লেখ করেছেন :

Test-Script -arg1 "Hello" -arg2 "World"

আপনি যখন সি # এর মধ্যে কোনও ফাংশন কল করেন তখন আপনি নিজের মতো বন্ধনী ব্যবহার করেন না


একাধিক প্যারামিটার ব্যবহার করার সময় আমি পরামিতিগুলির নামগুলি সর্বদা পাস করার পরামর্শ দেব , কারণ এটি আরও পাঠযোগ্য


এফওয়াইআই, অনুমোদিত ক্রিয়া তালিকা লিঙ্কটি আর কাজ করে না, তবে এখন এখানে পাওয়া যাবে - ডকস.মাইক্রোসফট
কিথ ল্যাঙ্গমেড

@ কিথল্যাংমেড কৃতজ্ঞ ধন্যবাদ, আমি আমার উত্তরও আপডেট করেছি।
মার্টিন ব্র্যান্ডল 21:58

1
"ক্রিয়াপদ-বিশেষ্য" উভয় ক্রিয়া এবং বিশেষ্য উভয় হিসাবে? সম্ভবত এটি আরও স্পষ্ট হতে উত্তর পরিবর্তন?
পিটার মর্টেনসেন

@ পিটারমোরটেনসেন যে উল্লেখ করার জন্য ধন্যবাদ। আমি আমার উত্তর আপডেট।
মার্টিন ব্র্যান্ডল

1
ভাল, আপনি একটি Get-Nodeসেমিডলেট উন্মুক্ত বিবেচনা করুন । এটা আমাদের জন্য স্পষ্ট আমরা ডাকা আছে হবে Get-Node, না Retrieve-Node, না Receive-Node, না .....
মার্টিন Brandl

4

আপনি ফাংশনটি দিয়ে কী করছেন তা আমি জানি না, তবে 'পরম' কীওয়ার্ডটি ব্যবহার করে দেখুন। কোনও ফাংশনে পরামিতিগুলি পাস করার জন্য এটি বেশ খানিকটা শক্তিশালী এবং এটি আরও বেশি ব্যবহারকারী বান্ধব করে তোলে। নীচে এটি সম্পর্কে মাইক্রোসফ্টের অত্যধিক জটিল নিবন্ধটির লিঙ্ক রয়েছে। নিবন্ধটি যতটা জটিল শোনায় এটি তেমন জটিল নয়।

পরম ব্যবহার

এছাড়াও, এই সাইটে একটি প্রশ্ন থেকে এখানে একটি উদাহরণ :

এটা দেখ.


উত্তরের জন্য ধন্যবাদ. তবে, ফাংশনটি কল করার সময় আমার সমস্যা ছিল। ফাংশনটি পরম দিয়ে ঘোষণা করা হয়েছে বা না করে তা বিবেচ্য নয়।
নাসির

3
Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC") ("DEF")

ফলাফলটি যেমনটি হওয়া উচিত

2

আমি নিম্নলিখিতটি আগে বলেছি:

সাধারণ সমস্যাটি একক রূপ ব্যবহার করে $argযা ভুল। এটি সর্বদা হিসাবে বহুবচন হওয়া উচিত $args

সমস্যাটি এমন নয়। আসলে,$arg অন্য কিছু হতে পারে। সমস্যাটি ছিল কমা এবং প্রথম বন্ধনী ব্যবহার।

আমি নিম্নলিখিত কোডটি চালিত করেছি যা কাজ করে এবং আউটপুট অনুসরণ করে:

কোড:

Function Test([string]$var1, [string]$var2)
{
    Write-Host "`$var1 value: $var1"
    Write-Host "`$var2 value: $var2"
}

"এবিসি" "ডিইএফ" পরীক্ষা করুন

আউটপুট:

$var1 value: ABC
$var2 value: DEF

4
আপনাকে ধন্যবাদ আমার বন্ধু, তবে আপনি কয়েক বছর দেরী করেছেন :-) এখানে শীর্ষ তিনটি উত্তর যথেষ্ট পরিমাণে এই সমস্যাটির সমাধান করেছে। আমি কি উত্তরবিহীন অংশে গিয়ে এই প্রশ্নগুলির কয়েকটি চেষ্টা করার পরামর্শ দিতে পারি?
নাসির


1

আপনি পাস করতে পারেন পরামিতি একটি ফাংশন এই মত:

function FunctionName()
{
    Param ([string]$ParamName);
    # Operations
}

3
এটি কোনও ফাংশনের জন্য পরামিতিগুলি সংজ্ঞায়িত করবে, মূল প্রশ্নটি ছিল আপনি যখন ফাংশনটি কল করবেন তখন প্যারামিটারগুলি কীভাবে নির্দিষ্ট করবেন।
নাসির

1

আমি এখানে এটি উল্লিখিত দেখতে পাচ্ছি না তবে আপনার যুক্তি ছিটানো একটি দরকারী বিকল্প এবং আপনি যদি কোনও আদেশের গতিশীলতার সাথে যুক্তিগুলি তৈরি করে থাকেন তবে বিশেষত কার্যকর হয় (ব্যবহারের বিপরীতেInvoke-Expression ) কার্যকরআপনি নামযুক্ত যুক্তিগুলির জন্য অ্যারে দিয়ে স্প্লিট করতে পারেন। এখানে কিছু উদাহরন:

অ্যারে দিয়ে স্প্ল্যাট (অবস্থানগত আর্গুমেন্ট)

অবস্থানগত আর্গুমেন্টগুলির সাথে টেস্ট-সংযোগ

Test-Connection www.google.com localhost

অ্যারে স্প্ল্যাটিংয়ের সাথে

$argumentArray = 'www.google.com', 'localhost'
Test-Connection @argumentArray

নোট করুন যে স্প্ল্যাটিং করার সময় আমরা স্প্ল্যাটেড ভেরিয়েবলটিকে একটি এর @পরিবর্তে উল্লেখ করি $। হ্যাশটেবল ব্যবহার করার সময় এটি একই রকম হয় sp

হ্যাশটেবল (নামযুক্ত আর্গুমেন্ট) সহ স্প্ল্যাট

নামযুক্ত যুক্তিগুলির সাথে পরীক্ষা-সংযোগ

Test-Connection -ComputerName www.google.com -Source localhost

হ্যাশটেবল স্প্ল্যাটিংয়ের সাথে

$argumentHash = @{
  ComputerName = 'www.google.com'
  Source = 'localhost'
}
Test-Connection @argumentHash

একযোগে স্প্ল্যাট পজিশনাল এবং নামযুক্ত যুক্তি

উভয় অবস্থানগত এবং নামযুক্ত তর্ক সঙ্গে পরীক্ষা-সংযোগ

Test-Connection www.google.com localhost -Count 1

একসাথে স্প্ল্যাটিং অ্যারে এবং হ্যাশটেবল

$argumentHash = @{
  Count = 1
}
$argumentArray = 'www.google.com', 'localhost'
Test-Connection @argumentHash @argumentArray
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.