about_Type_Operators
간단한 설명
Microsoft .NET 형식을 사용하는 연산자를 설명합니다.
자세한 설명
부울 형식 연산자(-is
및 -isnot
)는 개체가 지정된 .NET 형식의 인스턴스인지 여부를 나타냅니다. -is
형식이 일치하면 연산자는 TRUE 값을 반환하고 그렇지 않으면 FALSE 값을 반환합니다. -isnot
형식이 일치하면 연산자는 FALSE 값을 반환하고 그렇지 않으면 TRUE 값을 반환합니다.
연산자는 -as
입력 개체를 지정된 .NET 형식으로 변환하려고 합니다. 성공하면 변환된 개체를 반환합니다. 실패하면 $null
를 반환합니다. 오류를 반환하지 않습니다.
PowerShell에는 다음과 같은 형식 연산자가 있습니다.
-is
|입력이 지정된 .NET 형식의 인스턴스인 경우 TRUE를 반환합니다.(get-date) -is [DateTime] # Result is True
-isnot
|입력이 specified.NET 형식의 인스턴스가 아닌 경우 TRUE를 반환합니다.(get-date) -isnot [DateTime] # Result is False
-as
|입력을 지정된 .NET 형식으로 변환합니다."5/7/07" -as [DateTime] # Result is Monday, May 7, 2007 12:00:00 AM
형식 연산자의 구문은 다음과 같습니다.
<input> <operator> [.NET type]
다음 구문을 사용할 수도 있습니다.
<input> <operator> ".NET type"
.NET 형식은 대괄호나 문자열(예: [DateTime]
"DateTime"
System.DateTime)의 형식 이름으로 작성할 수 있습니다. 형식이 시스템 네임스페이스의 루트에 없는 경우 개체 형식의 전체 이름을 지정합니다. "시스템"을 생략할 수 있습니다. 예를 들어 System.Diagnostics.Process"Diagnostics.Process"
[Diagnostics.Process]
[System.Diagnostics.Process]
를 지정하려면
형식 연산자는 항상 입력 개체 전체에서 작동합니다. 즉, 입력 개체가 컬렉션인 경우 컬렉션 요소의 형식이 아니라 테스트되는 컬렉션 형식입니다.
-is/isnot 연산자
입력이 개체 컬렉션인 경우에도 부울 형식 연산자(-is
및-isnot
)는 항상 부울 값을 반환합니다.
.NET Type과 같거나 파생된 형식인 경우 <input>
연산자는 -is
반환합니다$True
.
예를 들어 DirectoryInfo 형식은 FileSystemInfo 형식에서 파생됩니다. 따라서 이러한 두 예제는 모두 True를 반환합니다.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
비교에서 -is
인터페이스를 구현하는 경우 <input>
연산자는 인터페이스를 일치시킬 수도 있습니다. 이 예제에서 입력은 배열입니다. 배열은 System.Collections.IList 인터페이스를 구현합니다.
PS> 1, 2 -is [System.Collections.IList]
True
-as 연산자
연산자는 -as
입력 개체를 지정된 .NET 형식으로 변환하려고 합니다. 성공하면 변환된 개체를 반환합니다. 실패하면 반환됩니다 $null
. 오류를 반환하지 않습니다.
<input>
.NET-as
형식에서 파생된 형식이면 변경되지 않은 입력 개체를 통해 전달됩니다. 예를 들어 DirectoryInfo 형식은 FileSystemInfo 형식에서 파생됩니다. 따라서 다음 예제에서는 개체 형식이 변경되지 않습니다.
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
DateTime 형식 변환은 문화권을 구분합니다.
형식 캐스팅과 달리 연산자를 사용하여 -as
형식으로 [DateTime]
변환하는 것은 현재 문화권의 규칙에 따라 형식이 지정된 문자열에서만 작동합니다.
PS> [cultureinfo]::CurrentCulture = 'fr-FR'
PS> '13/5/20' -as [datetime]
mercredi 13 mai 2020 00:00:00
PS> '05/13/20' -as [datetime]
PS> [datetime]'05/13/20'
mercredi 13 mai 2020 00:00:00
PS> [datetime]'13/05/20'
InvalidArgument: Cannot convert value "13/05/20" to type "System.DateTime".
Error: "String '13/05/20' was not recognized as a valid DateTime."
개체의 .NET 형식을 찾으려면 cmdlet을 Get-Member
사용합니다. 또는 이 메서드의 FullName 속성과 함께 모든 개체의 GetType 메서드를 사용합니다. 예를 들어 다음 문은 명령의 반환 값 형식을 Get-Culture
가져옵니다.
PS> (Get-Culture).GetType().FullName
System.Globalization.CultureInfo
예제
다음 예제에서는 Type 연산자의 일부 사용을 보여 줍니다.
PS> 32 -is [Float]
False
PS> 32 -is "int"
True
PS> (get-date) -is [DateTime]
True
PS> "12/31/2007" -is [DateTime]
False
PS> "12/31/2007" -is [String]
True
PS> (get-process PowerShell)[0] -is [System.Diagnostics.Process]
True
PS> (get-command get-member) -is [System.Management.Automation.CmdletInfo]
True
다음 예제에서는 입력이 개체 컬렉션인 경우 일치하는 형식이 컬렉션에 있는 개별 개체의 형식이 아니라 컬렉션의 .NET 형식임을 보여줍니다.
이 예제에서는 cmdlet과 Get-UICulture
cmdlet이 모두 Get-Culture
System.Globalization.CultureInfo 개체를 반환하지만 이러한 개체의 컬렉션은 System.Object 배열입니다.
PS> (get-culture) -is [System.Globalization.CultureInfo]
True
PS> (get-uiculture) -is [System.Globalization.CultureInfo]
True
PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
False
PS> (get-culture), (get-uiculture) -is [Array]
True
PS> (get-culture), (get-uiculture) | foreach {
$_ -is [System.Globalization.CultureInfo])
}
True
True
PS> (get-culture), (get-uiculture) -is [Object]
True
다음 예제에서는 연산자를 사용하는 방법을 보여 줍니다 -as
.
PS> "12/31/07" -is [DateTime]
False
PS> "12/31/07" -as [DateTime]
Monday, December 31, 2007 12:00:00 AM
PS> $date = "12/31/07" -as [DateTime]
C:\PS>$a -is [DateTime]
True
PS> 1031 -as [System.Globalization.CultureInfo]
LCID Name DisplayName
---- ---- -----------
1031 de-DE German (Germany)
다음 예제에서는 연산자가 입력 개체를 -as
.NET 형식으로 변환할 수 없는 경우 반환 $null
합니다.
PS> 1031 -as [System.Diagnostics.Process]
PS>
참고 항목
PowerShell
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기