Share via


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>

참고 항목