Использование PowerShell Core 6.1 на Mac.Похоже, что передача массива в ForEach-Object изменяет или упаковывает каждый элемент таким образом, что оператор -is считает, что все они являются объектами PSCustomObjects.
Позвольте мне продемонстрировать:
Настройка массиваиз четырех элементов разных типов (использование JSON, потому что именно отсюда поступают данные в моем реальном случае использования):
$a = '[4, "Hi", {}, true]' | ConvertFrom-Json
Итерируйте список по индексу и определите, какие из них являются PSCustomObjects:
0..3 | ForEach-Object {
$v = $a[$_]
$t = $v.GetType().FullName
$is = $v -is [PSCustomObject]
"$t - $is"
}
Вывод (для меня) - это именно то, что я ожидал:
System.Int64 - False
System.String - False
System.Management.Automation.PSCustomObject - True
System.Boolean - False
Но если я просто передам массив в ForEach-Object:
$a | ForEach-Object {
$v = $_
$t = $v.GetType().FullName
$is = $v -is [PSCustomObject]
"$t - $is"
}
Теперьвывод утверждает, что все четыре являются объектами PSCustomObject:
System.Int64 - True
System.String - True
System.Management.Automation.PSCustomObject - True
System.Boolean - True
Может кто-нибудь объяснить, что здесь происходит?