पॉवरशेल 3 से पहले
पॉवरशेल के एक्स्टेंसिबल टाइप सिस्टम ने मूल रूप से आपको ठोस प्रकार नहीं बनाने दिया, जो आप अपने पैरामीटर में किए गए तरीके के खिलाफ परीक्षण कर सकते हैं। यदि आपको उस परीक्षण की आवश्यकता नहीं है, तो आप ऊपर बताए गए किसी भी अन्य तरीके से ठीक हैं।
यदि आप एक वास्तविक प्रकार चाहते हैं, जिसे आप अपनी उदाहरण स्क्रिप्ट में ... के साथ टाइप या चेक कर सकते हैं ... इसे C # या VB.net में लिखे बिना और संकलन के बिना नहीं किया जा सकता है। PowerShell 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और इसी तरह ...
PowerShell 3 में
यदि आपको एक "वास्तविक" वर्ग की आवश्यकता नहीं है, जिसे आप कर सकते हैं, तो आपको ऐड-मेंबर के तरीके का उपयोग करने की आवश्यकता नहीं है जिसे स्टीवन और अन्य लोगों ने ऊपर दिखाया है।
PowerShell 2 के बाद से आप नए ऑब्जेक्ट के लिए -Property पैरामीटर का उपयोग कर सकते हैं:
$Contact = New-Object PSObject -Property @{ First=""; Last=""; Phone="" }
और PowerShell 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 में
PowerShell 5 में सब कुछ बदल जाता है, और हम अंततः मिल गए classऔर enumभाषा के रूप में टाइपिंग परिभाषित करने के लिए कीवर्ड (यह नहीं है structलेकिन यह ठीक है)
class Contact
{
[ValidateNotNullOrEmpty()][string]$First
[ValidateNotNullOrEmpty()][string]$Last
[ValidateNotNullOrEmpty()][string]$Phone
Contact($First, $Last, $Phone) {
$this.First = $First
$this.Last = $Last
$this.Phone = $Phone
}
}
हमें बिना उपयोग के ऑब्जेक्ट बनाने का एक नया तरीका भी मिला है New-Object: [Contact]::new()- वास्तव में, यदि आपने अपनी कक्षा को सरल रखा है और एक कंस्ट्रक्टर को परिभाषित नहीं करते हैं, तो आप हैशटेबल को कास्टिंग करके ऑब्जेक्ट बना सकते हैं (हालांकि बिना कंस्ट्रक्टर के, कोई रास्ता नहीं होगा लागू करने के लिए कि सभी संपत्तियों को सेट किया जाना चाहिए):
class Contact
{
[ValidateNotNullOrEmpty()][string]$First
[ValidateNotNullOrEmpty()][string]$Last
[ValidateNotNullOrEmpty()][string]$Phone
}
$C = [Contact]@{
First = "Joel"
Last = "Bennett"
}