Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает операторы, работающие с типами 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, введите [System.Diagnostics.Process][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
Оператор также может соответствовать интерфейсам, если -is он <input> реализует интерфейс в сравнении. В этом примере входные данные являются массивом. Массивы реализуют интерфейс 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