about_Type_Operators
Краткое описание
Описывает операторы, работающие с типами Microsoft .NET.
Подробное описание
Логические операторы типов (-is
и -isnot
) указывают, является ли объект экземпляром указанного типа .NET. Оператор -is
возвращает значение TRUE, если тип совпадает с значением FALSE в противном случае. Оператор -isnot
возвращает значение FALSE , если тип совпадает и значение TRUE в противном случае.
Оператор -as
пытается преобразовать входной объект в указанный тип .NET. Если он успешно выполнен, он возвращает преобразованный объект. В противном случае возвращается $null
. Он не возвращает ошибку.
PowerShell имеет следующие операторы типов:
-is
|Возвращает значение TRUE, если входные данные являются экземпляром указанного типа .NET.(get-date) -is [DateTime] # Result is True
-isnot
|Возвращает значение TRUE, если входные данные не экземпляр типа specified.NET.(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.". Например, чтобы указать System.Diagnostics.Process, введите [Diagnostics.Process]
[System.Diagnostics.Process]
или"Diagnostics.Process"
.
Операторы типов всегда работают с входным объектом в целом. То есть, если входной объект является коллекцией, это тип коллекции, который тестируется, а не типы элементов коллекции.
Операторы -is/isot
Логические операторы типов (-is
и-isnot
) всегда возвращают логическое значение, даже если входные данные являются коллекцией объектов.
Если <input>
это тип, который совпадает или является производным от типа .NET, -is
оператор возвращается $True
.
Например, тип DirectoryInfo является производным от типа FileSystemInfo . Поэтому оба этих примера возвращают значение True.
PS> (Get-Item /) -is [System.IO.DirectoryInfo]
True
PS> (Get-Item /) -is [System.IO.FileSystemInfo]
True
Оператор также может соответствовать интерфейсам, если <input>
он -is
реализует интерфейс в сравнении. В этом примере входные данные являются массивом. Массивы реализуют интерфейс System.Collections.IList .
PS> 1, 2 -is [System.Collections.IList]
True
Оператор -as
Оператор -as
пытается преобразовать входной объект в указанный тип .NET. Если он успешно выполнен, он возвращает преобразованный объект. При сбое возвращается $null
. Он не возвращает ошибку.
<input>
Если тип, производный от типа -as
.NET, передается через входной объект без изменений. Например, тип DirectoryInfo является производным от типа FileSystemInfo . Поэтому тип объекта не изменяется в следующем примере:
PS> $fsroot = (Get-Item /) -as [System.IO.FileSystemInfo]
PS> $fsroot.GetType().FullName
System.IO.DirectoryInfo
Преобразование типа DateTime учитывает язык и региональные параметры
В отличие от приведения типов, преобразование в [DateTime]
тип с помощью -as
оператора работает только со строками, отформатированными в соответствии с правилами текущего языка и региональных параметров.
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, используйте 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, а не типом отдельных объектов в коллекции.
В этом примере, хотя 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, он возвращается $null
.
PS> 1031 -as [System.Diagnostics.Process]
PS>
См. также
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по