Вы можете использовать оператор -is
, чтобы проверить тип, чтобы проверить, является ли он массивом:
$arr = 1, 2
$arr -is [array]
Однако, вероятно, более разумно проверить, что объект реализует IEnumerable
, так как Есть много типов коллекций, которые не являются конкретно массивами, но являются итеративными:
$arr = 1, 2
$arr -is [System.Collections.IEnumerable]
Также обратите внимание, что если вы присваиваете результат командлета / функции переменной, которая может вернуть более одного элемент, но он only возвращает коллекцию с одним элементом, по умолчанию она будет развернута и назначена как одно значение. Вы можете заставить возвращенную коллекцию быть оцененной / назначенной в виде массива одним из следующих методов (используя Get-Process
в качестве примера):
$arr = @( Get-Process iexplore ) # ===========> Forces the returned value to be part of a collection,
# even if only a single process is returned.
$arr -is [System.Collections.IEnumerable] # ==> true
или вы можете использовать нотацию ,
чтобы принудительно вычислять возвращаемые значения как коллекцию (в этом случае вам потребуется выполнить express вызов вашего командлета / функции):
$arr = , ( Get-Process iexplore )
$arr -is [System.Collections.IEnumerable]
Если вы проверяете generi c collection (коллекция, тип которой определен в пространстве имен System.Collections.Generic
), вы также можете проверить сопоставленный тип коллекции, используя вместо этого System.Collections.Generic.IEnumerable[T]
, где T
- тип элемента, разрешенный в массиве. Например:
$list = New-Object System.Collections.Generic.List[string]
$list -is [System.Collections.Generic.IEnumerable[string] # ==> true