Сведения об операторах типов
КРАТКОЕ ОПИСАНИЕ
Описывает операторы, работающие с типами Microsoft платформа .NET Framework.
ПОДРОБНОЕ ОПИСАНИЕ
Операторы логического типа (-is и -isNot) указывают, является ли объект экземпляром указанного типа платформа .NET Framework. Оператор -is возвращает значение TRUE, если тип совпадает, а в противном случае — значение FALSE. Оператор -isNot возвращает значение FALSE, если тип совпадает, и значение TRUE в противном случае.
Оператор -as пытается преобразовать входной объект в указанный тип платформа .NET Framework. В случае успешного выполнения он возвращает преобразованный объект. В случае сбоя возвращается $null. Ошибка не возвращается.
В следующей таблице перечислены операторы типов в PowerShell.
Оператор | Описание | Пример |
---|---|---|
-is |
Возвращает значение TRUE, если входные данные | (get-date) -is [DateTime] |
является экземпляром | True |
|
указанный тип .NET. | ||
-isNot |
Возвращает значение TRUE, если входные данные | (get-date) -isNot [DateTime] |
не является экземпляром | False |
|
тип specified.NET. | ||
-as |
Преобразует входные данные в | "5/7/07" -as [DateTime] |
указанный тип .NET. | Monday, May 7, 2007 12:00:00 AM |
Синтаксис операторов типа выглядит следующим образом:
<input> <operator> [.NET type]
Можно также использовать следующий синтаксис:
<input> <operator> ".NET type"
Чтобы указать тип платформа .NET Framework, заключите имя типа в квадратные скобки ([ ]) или введите тип в виде строки, например [DateTime] или "DateTime" для System.DateTime. Если тип не находится в корне системного пространства имен, укажите полное имя типа объекта. Можно опустить "System.". Например, чтобы указать System.Diagnostics.Process, введите [System.Diagnostics.Process], [Diagnostics.Process] или "диагностика.process".
Операторы логического типа (-is и -isNot) всегда возвращают логическое значение, даже если входные данные являются коллекцией объектов . Операторы типа всегда работают с входным объектом в целом. То есть, если входной объект является коллекцией, тестируется именно тип коллекции , а не типы элементов коллекции.
<Если входные данные> являются типом, производным от типа [тип.NET]-is
, возвращается$True
значение . <Если входные данные> являются типом, производным от передачи [тип.NET]-as
, преобразует входные данные в целевой тип. Например, (Get-Item /) -is [System.IO.FileSystemInfo]
возвращает $True
, так как тип входных данных , [System.IO.DirectoryInfo]
является производным[System.IO.FileSystemInfo]
от .
Чтобы найти тип платформа .NET Framework объекта, используйте командлет Get-Member. Или используйте метод GetType всех объектов вместе со свойством FullName этого метода. Например, следующая инструкция возвращает тип возвращаемого значения команды 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 Framework коллекции, а не типом отдельных объектов в коллекции.
В этом примере, хотя командлеты Get-Culture и Get-UICulture возвращают объекты 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 Framework, он ничего не возвращает.
PS> 1031 -as [System.Diagnostic.Process]
PS>