আমার স্ক্রিপ্টগুলি ব্যবহারের জন্য আমি কীভাবে পাওয়ারশেলের একটি পছন্দসই প্রকার তৈরি করব?


88

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

Contact
{
    string First
    string Last
    string Phone
}

আমি কীভাবে এটি তৈরি করতে যাব যাতে এটি নীচের মতো ফাংশনে ব্যবহার করতে পারি:

function PrintContact
{
    param( [Contact]$contact )
    "Customer Name is " + $contact.First + " " + $contact.Last
    "Customer Phone is " + $contact.Phone 
}

এর মতো কিছু কি সম্ভব, নাকি পাওয়ারশেলের ক্ষেত্রেও প্রস্তাবিত?

উত্তর:


135

পাওয়ারশেল 3 এর আগে

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

আপনি একটি প্রকৃত যে ধরনের আপনার কাছে বা সঙ্গে কাস্ট করতে পারেন আপনার উদাহরণ লিপিতে যেমন টাইপ-যাচাই চান তবে ... এটা করতে পারবে না C # এটা লেখার বা VB.net এবং কম্পাইল ছাড়া করা। পাওয়ারশেল 2-এ, আপনি এটিকে বেশ সাদৃশ্য করতে "অ্যাড-টাইপ" কমান্ডটি ব্যবহার করতে পারেন:

add-type @"
public struct contact {
   public string First;
   public string Last;
   public string Phone;
}
"@

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

New-Struct Contact @{
    First=[string];
    Last=[string];
    Phone=[string];
}

ব্যবহার করে Add-Typeবা New-Structআপনাকে প্রকৃতপক্ষে আপনার ক্লাসটি পরীক্ষা param([Contact]$contact)করতে দেয় এবং নতুন ব্যবহার করে আরও কিছু করতে $contact = new-object Contactদেয় ...

পাওয়ারশেল 3 এ

আপনি যদি "সত্য" ক্লাসের প্রয়োজন না পড়েন যার জন্য আপনি কাস্ট করতে পারেন তবে আপনাকে স্টিভেন এবং অন্যরা উপরে যেভাবে অ্যাড-মেম্বার দেখিয়েছেন তা ব্যবহার করতে হবে না ।

পাওয়ারশেল 2 যেহেতু আপনি নতুন-অবজেক্টের জন্য-প্রপার্টি প্যারামিটার ব্যবহার করতে পারেন:

$Contact = New-Object PSObject -Property @{ First=""; Last=""; Phone="" }

এবং পাওয়ারশেল 3-তে, আমরা PSCustomObjectটাইপনাম যুক্ত করতে এক্সিলিটরটি ব্যবহার করার ক্ষমতা পেয়েছি :

[PSCustomObject]@{
    PSTypeName = "Contact"
    First = $First
    Last = $Last
    Phone = $Phone
}

আপনি এখনও কেবল একটি একক বস্তু পেয়ে যাচ্ছেন, সুতরাং New-Contactপ্রতিটি বস্তু একইরূপে বেরিয়ে আসে তা নিশ্চিত করার জন্য আপনার একটি ফাংশন করা উচিত তবে আপনি এখন সহজেই একটি বৈশিষ্ট্য সহ একটি প্যারামিটার সাজিয়ে একটি পরামিতি "এই" প্যারামিটারটি যাচাই করতে পারবেন PSTypeName:

function PrintContact
{
    param( [PSTypeName("Contact")]$contact )
    "Customer Name is " + $contact.First + " " + $contact.Last
    "Customer Phone is " + $contact.Phone 
}

পাওয়ারশেল 5 এ

পাওয়ারশেল ৫-এ সমস্ত কিছু পরিবর্তিত হয় এবং অবশেষে আমরা পেয়েছি classএবং enumপ্রকার নির্ধারণের জন্য ভাষা কীওয়ার্ড হিসাবে পেয়েছি ( structঠিক আছে তবে তা নেই ):

class Contact
{
    # Optionally, add attributes to prevent invalid values
    [ValidateNotNullOrEmpty()][string]$First
    [ValidateNotNullOrEmpty()][string]$Last
    [ValidateNotNullOrEmpty()][string]$Phone

    # optionally, have a constructor to 
    # force properties to be set:
    Contact($First, $Last, $Phone) {
       $this.First = $First
       $this.Last = $Last
       $this.Phone = $Phone
    }
}

আমরা ব্যবহার না করে অবজেক্ট তৈরি করার একটি নতুন উপায়ও পেয়েছি New-Object: [Contact]::new()- বাস্তবে, আপনি যদি নিজের শ্রেণিটি সহজ করে রাখেন এবং কোনও কনস্ট্রাক্টরকে সংজ্ঞায়িত না করেন তবে আপনি হ্যাশটেবল castালাই করে অবজেক্টগুলি তৈরি করতে পারেন (যদিও বিনা কনস্ট্রাক্টর ছাড়া উপায় নেই) প্রয়োগ করার জন্য যে সমস্ত সম্পত্তি সেট করা আবশ্যক):

class Contact
{
    # Optionally, add attributes to prevent invalid values
    [ValidateNotNullOrEmpty()][string]$First
    [ValidateNotNullOrEmpty()][string]$Last
    [ValidateNotNullOrEmpty()][string]$Phone
}

$C = [Contact]@{
   First = "Joel"
   Last = "Bennett"
}

দুর্দান্ত উত্তর! কেবল একটি নোট যুক্ত করুন যে এই স্টাইলটি স্ক্রিপ্টগুলির জন্য খুব সহজ এবং এটি পাওয়ারশেল 5: নতুন-অবজেক্ট PSObject -Property @ {প্রোপ এখানে কাজ করে ...}
রায়ান শিলিংটন

4
প্রথম দিকে পাওয়ারশেল 5 রিলিজে আপনি ক্লাস সিনট্যাক্স ব্যবহার করে তৈরি ক্লাসগুলির সাথে নিউ-অবজেক্টটি ব্যবহার করতে পারেন নি তবে আপনি এখন তা করতে পারেন। তবুও, যদি আপনি ক্লাস কীওয়ার্ডটি ব্যবহার করেন তবে আপনার স্ক্রিপ্টটি কেবলমাত্র PS5 এর মধ্যে সীমাবদ্ধ রয়েছে, তাই আমি এখনও নতুন সিনট্যাক্সটি ব্যবহার করার পরামর্শ দেব যদি অবজেক্টে কোনও কনস্ট্রাক্টর থাকে যা প্যারামিটার নেয় (এটি নিউ-অবজেক্টের চেয়ে অনেক দ্রুত) বা অন্যথায় ingালাই করা, যা উভয় ক্লিনার ক্লিনাক্স এবং দ্রুত।
জয়কুল

আপনি কি নিশ্চিত যে ব্যবহার করে তৈরি প্রকারের মাধ্যমে টাইপ চেকিং করা যায় না Add-Type? এটি উইন ২০০৮ আর 2 তে পাওয়ারশেল 2 তে কাজ করছে বলে মনে হচ্ছে। আমি সংজ্ঞায়িত বলুন contactব্যবহার Add-Typeআপনার উত্তর হিসাবে এবং তারপর একটি দৃষ্টান্ত তৈরি করুন: $con = New-Object contact -Property @{ First="a"; Last="b"; Phone="c" }। তারপরে এই ফাংশনটি কল করা কার্যকর হয়: function x([contact]$c) { Write-Host ($c | Out-String) $c.GetType() }তবে এই ফাংশনটি কল করা ব্যর্থ হয় x([doesnotexist]$c) { Write-Host ($c | Out-String) $c.GetType() },। Ing x 'abc'ালাই সম্পর্কে উপযুক্ত ত্রুটি বার্তায় কলিংও ব্যর্থ হয়। PS 2 এবং 4
jpmc26

অবশ্যই আপনি Add-Type@ jpmc26 দিয়ে তৈরি প্রকারগুলি যাচাই করতে পারেন , আমি যা বলেছিলাম তা হ'ল সংকলন ব্যতীত আপনি এটি করতে পারবেন না (যেমন: এটি সি # তে লিখিত এবং কল না করে Add-Type)। অবশ্যই, পিএস 3 থেকে আপনি যা করতে পারেন - একটি আছে [PSTypeName("...")]অ্যাট্রিবিউট যা আপনি একটি স্ট্রিং, যা সেট PSTypeNames সঙ্গে PSCustomObjects বিরুদ্ধে এইচআইভি পরীক্ষার সমর্থন যেমন টাইপ নির্দিষ্ট করার অনুমতি দেয় ...
Jaykul

58

কাস্টম প্রকার তৈরির ক্ষমতা পাওয়ারশেলে করা যেতে পারে।
কर्क মুনরোতে দুটি দুর্দান্ত পোস্ট রয়েছে যা প্রক্রিয়াটি পুরোপুরি বিশদভাবে জানায়।

উইন্ডোজ পাওয়ারশেল ইন অ্যাকশন বইয়ের ম্যানিং- এ কাস্টম প্রকারগুলি তৈরি করতে একটি ডোমেন নির্দিষ্ট ভাষা তৈরির জন্য একটি কোড নমুনা রয়েছে। বইটি চারদিকে দুর্দান্ত, তাই আমি এটি সত্যই সুপারিশ করছি।

আপনি যদি উপরের কাজটি করার জন্য কেবল দ্রুত উপায় সন্ধান করছেন, আপনি পছন্দ মতো কাস্টম অবজেক্ট তৈরি করতে একটি ফাংশন তৈরি করতে পারেন

function New-Person()
{
  param ($FirstName, $LastName, $Phone)

  $person = new-object PSObject

  $person | add-member -type NoteProperty -Name First -Value $FirstName
  $person | add-member -type NoteProperty -Name Last -Value $LastName
  $person | add-member -type NoteProperty -Name Phone -Value $Phone

  return $person
}

17

এটি শর্টকাট পদ্ধতি:

$myPerson = "" | Select-Object First,Last,Phone

4
মূলত, সিলেক্ট-অবজেক্ট সেন্টিমিডলেট বস্তুগুলিতে বৈশিষ্ট্য যুক্ত করে যে এটি দেওয়া হয় যদি বস্তুর কাছে ইতিমধ্যে সম্পত্তি থাকে না। এই ক্ষেত্রে আপনি একটি ফাঁকা স্ট্রিং অবজেক্ট নির্বাচন করুন-বস্তু সেমিডলেটকে হস্তান্তর করছেন। এটি বৈশিষ্ট্যগুলি যুক্ত করে এবং পাইপ বরাবর বস্তুটি পাস করে। অথবা যদি এটি পাইপের শেষ কমান্ড হয় তবে এটি বস্তুটিকে আউটপুট করে। আমার উল্লেখ করা উচিত যে আমি প্রম্পটে কাজ করে থাকলে আমি কেবল এই পদ্ধতিটি ব্যবহার করি। স্ক্রিপ্টগুলির জন্য, আমি সবসময় আরও স্পষ্টভাবে অ্যাড-সদস্য বা নিউ-অবজেক্ট সেমিডলেট ব্যবহার করি।
EBGreen

যদিও এটি দুর্দান্ত কৌশল আপনি আসলে এটি আরও ছোট করে তুলতে পারেন:$myPerson = 1 | Select First,Last,Phone
রায়েল

এটি আপনাকে নেটিভ টাইপ ফাংশনগুলি ব্যবহার করতে দেয় না, কারণ এটি প্রতিটি সদস্যের ধরনকে স্ট্রিং হিসাবে সেট করে। উপরের জয়কুল অবদান দেওয়া, প্রতিটি সদস্য নোটকে NotePropertyএক stringপ্রকার হিসাবে প্রকাশ করে , এটি Propertyআপনি বস্তুটিতে যে কোনও ধরণের নির্ধারণ করেছেন। এটি দ্রুত এবং যদিও কাজটি করে।
mbrownnyc

আপনি যদি দৈর্ঘ্যের সম্পত্তি চান তবে এটি আপনাকে সমস্যা দিতে পারে, কারণ স্ট্রিংটিতে ইতিমধ্যে এবং আপনার নতুন অবজেক্টটি বিদ্যমান মান পাবে - যা আপনি সম্ভবত চান না। @ রাইয়েল শো হিসাবে আমি একটি [অন্তর্] পাস করার পরামর্শ দিচ্ছি।
এফএসসিকুর

9

স্টিভেন মুরাউস্কির উত্তর দুর্দান্ত, তবে আমি সংক্ষিপ্ত (বা অ্যাড-সদস্য সিনট্যাক্স ব্যবহার না করে কেবলমাত্র আরও ভাল নির্বাচন-বস্তু) পছন্দ করি:

function New-Person() {
  param ($FirstName, $LastName, $Phone)

  $person = new-object PSObject | select-object First, Last, Phone

  $person.First = $FirstName
  $person.Last = $LastName
  $person.Phone = $Phone

  return $person
}

New-Objectএমনকি প্রয়োজন হয় না। এটি একই কাজ করবে:... = 1 | select-object First, Last, Phone
রোমান কুজমিন

4
হ্যাঁ, তবে উপরের ইগ্রগ্রিনের মতোই - এটি এক ধরণের অদ্ভুত অন্তর্নিহিত প্রকার তৈরি করে (এটি উদাহরণস্বরূপ এটি একটি ইন্টার 32 হবে)) আপনি দেখতে পাবেন যেমন আপনি টাইপ করেছেন: $ ব্যক্তি | গ্রাম আমি অন্তর্নিহিত টাইপটি পিএসকাস্টমঅবজেক্ট হওয়া পছন্দ করি
নিক মেলড্রাম

4
আমি বিন্দু দেখতে। তবুও, উপায়ের সুস্পষ্ট সুবিধাগুলি রয়েছে int: 1) এটি দ্রুত কাজ করে, খুব বেশি নয়, তবে এই নির্দিষ্ট ফাংশনের New-Personজন্য পার্থক্য 20%; 2) এটি টাইপ করা দৃশ্যত সহজ। একই সময়ে, মূলত সর্বত্র এই পদ্ধতির ব্যবহার করে, আমি কোনও ত্রুটি কখনও দেখিনি। তবে আমি সম্মত: PSCustomObject ভাল ধরনের হয় যখন কিছু বিরল ঘটনা হতে পারে।
রোমান কুজমিন

@ রোমানকুজমিন যদি আপনি কোনও বিশ্বব্যাপী কাস্টম অবজেক্ট ইনস্ট্যান্ট করে স্ক্রিপ্ট ভেরিয়েবল হিসাবে সংরক্ষণ করেন তবে কি এটি এখনও 20% বেশি দ্রুত?
jpmc26

5

অবাক করে কেউ কাস্টম অবজেক্ট তৈরির জন্য এই সহজ বিকল্পটি (বনাম 3 বা তার পরে) উল্লেখ করেনি:

[PSCustomObject]@{
    First = $First
    Last = $Last
    Phone = $Phone
}

প্রকারটি PSCustomObject হবে, যদিও প্রকৃত কাস্টম টাইপ নয়। তবে এটি সম্ভবত কাস্টম অবজেক্ট তৈরির সহজতম উপায়।


পিএসওবজেক্ট এবং পিএসকাস্টমঅবজেক্টের পার্থক্য সম্পর্কে উইল অ্যান্ডারসনের এই ব্লগ পোস্টটিও দেখুন।
কোডফক্স

@ কোডফক্স সবেমাত্র লক্ষ্য করেছে যে লিঙ্কটি এখন ভেঙে গেছে
সুপারজোজ

4
@ সুপেরজস, ইঙ্গিতটির জন্য ধন্যবাদ আমি পোস্টের নতুন অবস্থান সন্ধান করতে অক্ষম ছিল। কমপক্ষে পোস্টটির ব্যাক আপ ছিল সংরক্ষণাগারটির
কোডফক্স 15

4
আপাতদৃষ্টিতে মনে হচ্ছে এটি এখানে একটি গিট বইতে পরিণত হয়েছে :)
superjos

4

PSObject এবং অ্যাড-সদস্যের ধারণাটি আপনি ব্যবহার করতে পারেন।

$contact = New-Object PSObject

$contact | Add-Member -memberType NoteProperty -name "First" -value "John"
$contact | Add-Member -memberType NoteProperty -name "Last" -value "Doe"
$contact | Add-Member -memberType NoteProperty -name "Phone" -value "123-4567"

এই ফলাফলগুলি:

[8] » $contact

First                                       Last                                       Phone
-----                                       ----                                       -----
John                                        Doe                                        123-4567

অন্য বিকল্প (যা আমি সচেতন) হ'ল সি # / ভিবি.এনইটি তে কোনও ধরণের সংজ্ঞা দেওয়া এবং সরাসরি ব্যবহারের জন্য সেই সমাবেশটি পাওয়ারশেলের মধ্যে লোড করা।

এই আচরণটি অবশ্যই উত্সাহিত হয়েছে কারণ এটি অন্যান্য স্ক্রিপ্ট বা আপনার স্ক্রিপ্টের অংশগুলিকে একটি আসল অবজেক্টের সাথে কাজ করার অনুমতি দেয়।


3

এখানে কাস্টম প্রকার তৈরি করতে এবং সেগুলিকে সংগ্রহে সঞ্চয় করার জন্য শক্ত পথ।

$Collection = @()

$Object = New-Object -TypeName PSObject
$Object.PsObject.TypeNames.Add('MyCustomType.Contact.Detail')
Add-Member -InputObject $Object -memberType NoteProperty -name "First" -value "John"
Add-Member -InputObject $Object -memberType NoteProperty -name "Last" -value "Doe"
Add-Member -InputObject $Object -memberType NoteProperty -name "Phone" -value "123-4567"
$Collection += $Object

$Object = New-Object -TypeName PSObject
$Object.PsObject.TypeNames.Add('MyCustomType.Contact.Detail')
Add-Member -InputObject $Object -memberType NoteProperty -name "First" -value "Jeanne"
Add-Member -InputObject $Object -memberType NoteProperty -name "Last" -value "Doe"
Add-Member -InputObject $Object -memberType NoteProperty -name "Phone" -value "765-4321"
$Collection += $Object

Write-Ouput -InputObject $Collection

অবজেক্টে টাইপের নাম যুক্ত করে সুন্দর স্পর্শ করুন।
o

0

এখানে আরও একটি বিকল্প, যা PSTypeName সমাধান উল্লেখ করার জন্য একটি অনুরূপ ধারণা ব্যবহার এর Jaykul (এবং এইভাবে এছাড়াও PSv3 অথবা উপরে আবশ্যক)।

উদাহরণ

  1. আপনার টাইপকে সংজ্ঞায়িত করে একটি TypeName .Typees.ps1xML ফাইল তৈরি করুন । যেমন Person.Types.ps1xml:
<?xml version="1.0" encoding="utf-8" ?>
<Types>
  <Type>
    <Name>StackOverflow.Example.Person</Name>
    <Members>
      <ScriptMethod>
        <Name>Initialize</Name>
        <Script>
            Param (
                [Parameter(Mandatory = $true)]
                [string]$GivenName
                ,
                [Parameter(Mandatory = $true)]
                [string]$Surname
            )
            $this | Add-Member -MemberType 'NoteProperty' -Name 'GivenName' -Value $GivenName
            $this | Add-Member -MemberType 'NoteProperty' -Name 'Surname' -Value $Surname
        </Script>
      </ScriptMethod>
      <ScriptMethod>
        <Name>SetGivenName</Name>
        <Script>
            Param (
                [Parameter(Mandatory = $true)]
                [string]$GivenName
            )
            $this | Add-Member -MemberType 'NoteProperty' -Name 'GivenName' -Value $GivenName -Force
        </Script>
      </ScriptMethod>
      <ScriptProperty>
        <Name>FullName</Name>
        <GetScriptBlock>'{0} {1}' -f $this.GivenName, $this.Surname</GetScriptBlock>
      </ScriptProperty>
      <!-- include properties under here if we don't want them to be visible by default
      <MemberSet>
        <Name>PSStandardMembers</Name>
        <Members>
        </Members>
      </MemberSet>
      -->
    </Members>
  </Type>
</Types>
  1. আপনার টাইপ আমদানি করুন: Update-TypeData -AppendPath .\Person.Types.ps1xml
  2. আপনার কাস্টম ধরণের একটি অবজেক্ট তৈরি করুন: $p = [PSCustomType]@{PSTypeName='StackOverflow.Example.Person'}
  3. এক্সএমএলে আপনি সংজ্ঞায়িত স্ক্রিপ্ট পদ্ধতিটি ব্যবহার করে আপনার প্রকারের সূচনা করুন: $p.Initialize('Anne', 'Droid')
  4. এর দিকে তাকাও; আপনি সংজ্ঞাযুক্ত সমস্ত সম্পত্তি দেখতে পাবেন:$p | Format-Table -AutoSize
  5. কোনও সম্পত্তিটির মান আপডেট করতে কোনও মিউটরকে কল করে টাইপ করুন: $p.SetGivenName('Dan')
  6. আপডেট হওয়া মানটি দেখতে এটি আবার দেখুন: $p | Format-Table -AutoSize

ব্যাখ্যা

  • PS1XML ফাইল আপনাকে প্রকারভেদে কাস্টম বৈশিষ্ট্য সংজ্ঞায়িত করতে দেয়।
  • ডকুমেন্টেশন দ্বারা বোঝা যায় এটি। নেট প্রকারের মধ্যে সীমাবদ্ধ নয়; যাতে আপনি '/ প্রকার / প্রকার / নাম' তে যা পছন্দ করেন তা 'PSTypeName' এর সাথে মিলে যাওয়া যে কোনও বস্তু এই ধরণের জন্য সংজ্ঞায়িত সদস্যদের উত্তরাধিকারী হতে পারে put
  • সদস্যদের মাধ্যমে যোগ PS1XMLবা Add-Memberসীমাবদ্ধ করতে NoteProperty, AliasProperty, ScriptProperty, CodeProperty, ScriptMethod, এবং CodeMethod(অথবা PropertySet/MemberSet ; ঐ একই বিধিনিষেধ সাপেক্ষে যদিও)। এই সমস্ত সম্পত্তি শুধুমাত্র পঠিত হয়।
  • একটি সংজ্ঞায়িত করে ScriptMethodআমরা উপরের সীমাবদ্ধতা ঠকাতে পারি। উদাহরণস্বরূপ আমরা একটি পদ্ধতি সংজ্ঞায়িত করতে পারি (উদাInitialize ) যা নতুন বৈশিষ্ট্য তৈরি করে, আমাদের জন্য তাদের মান নির্ধারণ করে; এইভাবে আমাদের অন্যান্য স্ক্রিপ্টগুলির কাজ করার জন্য আমাদের প্রয়োজনীয় সমস্ত বৈশিষ্ট্য আমাদের বস্তুটিকে নিশ্চিত করে।
  • উদাহরণস্বরূপ যেমনটি দেখানো হয়েছে তেমন বৈশিষ্ট্যগুলিকে আপডেট করার যোগ্য (সরাসরি অ্যাসাইনমেন্টের পরিবর্তে পদ্ধতি অনুসারে) করার অনুমতি দেওয়ার জন্য আমরা এই একই কৌশলটি ব্যবহার করতে পারি SetGivenName

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

অধিক তথ্য

কটাক্ষপাত ডকুমেন্টেশন , অথবা OOTB টাইপ ফাইল Get-Content $PSHome\types.ps1xmlঅনুপ্রেরণা জন্য।

# have something like this defined in my script so we only try to import the definition once.
# the surrounding if statement may be useful if we're dot sourcing the script in an existing 
# session / running in ISE / something like that
if (!(Get-TypeData 'StackOverflow.Example.Person')) {
    Update-TypeData '.\Person.Types.ps1xml'
}

# have a function to create my objects with all required parameters
# creating them from the hash table means they're PROPERties; i.e. updatable without calling a 
# setter method (note: recall I said above that in this scenario I'd remove their definition 
# from the PS1XML)
function New-SOPerson {
    [CmdletBinding()]
    [OutputType('StackOverflow.Example.Person')]
    Param (
        [Parameter(Mandatory)]
        [string]$GivenName
        ,
        [Parameter(Mandatory)]
        [string]$Surname
    )
    ([PSCustomObject][Ordered]@{
        PSTypeName = 'StackOverflow.Example.Person'
        GivenName = $GivenName
        Surname = $Surname
    })
}

# then use my new function to generate the new object
$p = New-SOPerson -GivenName 'Simon' -Surname 'Borg'

# and thanks to the type magic... FullName exists :)
Write-Information "$($p.FullName) was created successfully!" -InformationAction Continue

পুনশ্চ. ভিএসকোড ব্যবহারকারীদের জন্য, আপনি পিএস 1 এক্সএমএল সমর্থন যুক্ত করতে পারেন: কোড. visualstudio.com/docs/languages/…
LBevan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.