Мне нужно написать некоторые вещи в PowerCLI (болт VMWare в PowerShell).В основном у нас есть кластер серверов с тремя хостами.Каждый хост имеет несколько виртуальных коммутаторов.Каждый виртуальный коммутатор имеет несколько виртуальных сетей («группы портов» в VMWare говорят).Мне нужно проверить тот факт, что на каждом хосте существуют одинаковые группы портов (поэтому, если виртуальная машина перемещается, все работает).
Шаг 1 для достижения этой цели - узнать, что имя группы портов существует накаждая из трех хост-машин.
Я спорю о том, как отфильтровать некоторые объекты из всех, возвращаемых командлетом, на основе количества результатов, возвращаемых свойством этих объектов.Затем мне нужно выполнить дальнейшие операции с исходным типом объекта, который проходит тест фильтра, чтобы продолжить работу по конвейеру.
Чтобы дать некоторую конкретику, в этом примере показан «Некоторое имя группы портов» и три хоста, на которых он существует.(и в качестве бонуса vSwitch):
Get-VirtualPortGroup -Name 'Some PortGroup Name' |
Select-Object Name, VMHostID, VirtualSwitchId
производит вывод
Name VMHostId VirtualSwitchId
---- -------- ---------------
Some PortGroup Name HostSystem-host-29459 key-vim.host.VirtualSwitch-vSwitch6
Some PortGroup Name HostSystem-host-29463 key-vim.host.VirtualSwitch-vSwitch6
Some PortGroup Name HostSystem-host-29471 key-vim.host.VirtualSwitch-vSwitch6
Вместо 3 я начинаю с имен групп групп портов 1849, которые возвращаютсяGet-VirtualPortGroup
.Мне нужен конвейер, чтобы свести число объектов VirtualPortGroup к коллекции, состоящей только из тех объектов, в которых значение свойства VMHostId меньше 3, и передать оставшиеся объекты VirtualPortGroup по конвейеру для дальнейшей обработки.
Это, кажется, достаточно просто сделать.Я все еще терплю неудачу, хотя.
Следующее почти работает.Трубопровод для измерения показывает счетчик 229 вместо исходного 1849 (так что он определенно отфильтрован и, возможно, правильно возвращает подмножество, которое я ищу ...?).Проблема в том, что тип объекта теперь является «группой» или чем-то в этой точке конвейера, и не имеет всех свойств и методов исходных Get-VirtualPortGroup
объектов.
Get-VirtualPortGroup |
Group-Object -Property Name |
Where-Object $_.Count -lt 3
Болтинг| Select-Object -ExpandProperty Group
до конца вышеприведенного показалось многообещающим, за исключением того, что оно, похоже, возвращает всю коллекцию Get-VirtualPortGroup
объектов, как будто я вообще там не фильтровал ....
Я такойделать что-то в корне неправильно?
Как я могу отфильтровать объекты по количеству результатов, возвращаемых определенным свойством объекта, но все же передать исходный тип объекта по конвейеру?