PowerShell 3'ten önce
PowerShell'in Genişletilebilir Tip Sistemi, başlangıçta parametrenizde yaptığınız şekilde test edebileceğiniz somut türler oluşturmanıza izin vermedi. Bu teste ihtiyacınız yoksa, yukarıda belirtilen diğer yöntemlerden herhangi birinde sorun yok.
Örnek betiğinizde olduğu gibi çevirebileceğiniz veya yazarak kontrol edebileceğiniz gerçek bir tür istiyorsanız ... C # veya VB.net'e yazmadan ve derlemeden yapılamaz. PowerShell 2'de, bunu oldukça basit bir şekilde yapmak için "Add-Type" komutunu kullanabilirsiniz:
add-type @"
public struct contact {
public string First;
public string Last;
public string Phone;
}
"@
Tarihsel Not : PowerShell 1'de daha da zordu. CodeDom'umanuel olarak kullanmanız gerekiyordu, PoshCode.org'da yardımcı olacakçok eski bir işlev yeni yapı betiği var. Örneğiniz şöyle olur:
New-Struct Contact @{
First=[string];
Last=[string];
Phone=[string];
}
Add-Type
Veya kullanmak New-Struct
, sınıfınızı gerçekten test etmenize param([Contact]$contact)
ve kullanarak yenilerini yapmanıza izin verir $contact = new-object Contact
ve benzeri ...
PowerShell 3'te
Cast yapabileceğiniz "gerçek" bir sınıfa ihtiyacınız yoksa, Steven ve diğerlerinin yukarıda gösterdiği Üye Ekle yöntemini kullanmak zorunda değilsiniz .
PowerShell 2'den bu yana New-Object için -Property parametresini kullanabilirsiniz:
$Contact = New-Object PSObject -Property @{ First=""; Last=""; Phone="" }
Ve PowerShell 3'te, PSCustomObject
hızlandırıcıyı TypeName eklemek için kullanma yeteneğine sahibiz :
[PSCustomObject]@{
PSTypeName = "Contact"
First = $First
Last = $Last
Phone = $Phone
}
Hâlâ tek bir nesne alıyorsunuz, bu nedenle New-Contact
her nesnenin aynı şekilde çıktığından emin olmak için bir işlev yapmalısınız, ancak artık bir parametreyi PSTypeName
öznitelikle süsleyerek bir parametrenin bu türlerden biri olduğunu kolayca doğrulayabilirsiniz :
function PrintContact
{
param( [PSTypeName("Contact")]$contact )
"Customer Name is " + $contact.First + " " + $contact.Last
"Customer Phone is " + $contact.Phone
}
PowerShell 5'te
PowerShell 5 her şey değişir, ve nihayet got içinde class
ve enum
türlerini tanımlamak için dil anahtar (hiçbir olduğu gibi struct
ama sorun değil):
class Contact
{
[ValidateNotNullOrEmpty()][string]$First
[ValidateNotNullOrEmpty()][string]$Last
[ValidateNotNullOrEmpty()][string]$Phone
Contact($First, $Last, $Phone) {
$this.First = $First
$this.Last = $Last
$this.Phone = $Phone
}
}
Ayrıca kullanmadan nesneler oluşturmanın yeni bir yolunu da bulduk New-Object
: [Contact]::new()
- aslında, sınıfınızı basit tuttuysanız ve bir kurucu tanımlamadıysanız, bir hashtable oluşturarak nesneler yaratabilirsiniz (ancak bir kurucu olmadan hiçbir şekilde olmazdı) tüm özelliklerin ayarlanmasını zorunlu kılmak için):
class Contact
{
[ValidateNotNullOrEmpty()][string]$First
[ValidateNotNullOrEmpty()][string]$Last
[ValidateNotNullOrEmpty()][string]$Phone
}
$C = [Contact]@{
First = "Joel"
Last = "Bennett"
}