PowerShell 3 이전
PowerShell의 확장 가능 유형 시스템은 원래 매개 변수에서 수행 한 방식에 대해 테스트 할 수있는 구체적인 유형을 만들 수 있도록 허용하지 않았습니다. 해당 테스트가 필요하지 않은 경우 위에서 언급 한 다른 방법을 사용해도됩니다.
예제 스크립트에서와 같이 캐스팅하거나 형식 검사 할 수있는 실제 형식을 원한다면 C # 또는 VB.net으로 작성하고 컴파일하지 않으면 수행 할 수 없습니다 . PowerShell 2에서는 "Add-Type"명령을 사용하여 매우 간단하게 수행 할 수 있습니다.
add-type @"
public struct contact {
public string First;
public string Last;
public string Phone;
}
"@
역사적 참고 사항 : PowerShell 1에서는 훨씬 더 어려웠습니다. CodeDom을 수동으로 사용해야했습니다. PoshCode.org에는 매우 오래된 함수 new-struct 스크립트가 있습니다. 귀하의 예는 다음과 같습니다.
New-Struct Contact @{
First=[string];
Last=[string];
Phone=[string];
}
Add-Type
또는 사용 New-Struct
하면 실제로 수업을 테스트하고 등을 param([Contact]$contact)
사용하여 새 수업을 만들 $contact = new-object Contact
수 있습니다.
PowerShell 3에서
캐스팅 할 수있는 "실제"클래스가 필요하지 않은 경우 Steven과 다른 사람들이 위에서 보여준 Add-Member 방식을 사용할 필요가 없습니다 .
PowerShell 2부터 New-Object에 -Property 매개 변수를 사용할 수 있습니다.
$Contact = New-Object PSObject -Property @{ First=""; Last=""; Phone="" }
그리고 PowerShell 3에서는 PSCustomObject
가속기를 사용하여 TypeName을 추가 할 수 있습니다.
[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
}
PowerShell 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"
}