Самый простой способ *1002* для получения самих входных объектов - это с помощью переключателя -PassThru
:
PS> Compare-Object 'server1', 'server2', 'server3' @() -PassThru
server1
server2
server3
Предостережение является то, что входные объекты по-прежнему украшены SideIndicator
элементом NoteProperty (в отличие от обернутого в [pscustomobject]
экземпляре с InputObject
и SideIndicator
prperties), используя ETS PowerShell (Extended Type System).
Как показано выше, это свойство не обязательно всплывает, но есть контексты, где оно появляется, например, когда вы сериализуете объекты через ConvertTo-Json
например.
К сожалению, единственный способ избежать этого украшения - не использовать -PassThru
и извлечь значение свойства InputObject
из выходных данных [pscustomobject]
экземпляры , что вы и пытались:
Я пытался просто выбрать InputObject из переменной, используя точечную запись, но безуспешно.
Доступ к свойству .InputObject
для всех выходных объектов через перечисление членов работает работает:
# Test command that compares an array of strings to the empty array.
PS> (Compare-Object 'server1', 'server2', 'server3' @()).InputObject
server1
server2
server3
Если вы все равно планируете собрать все объекты в памяти, это подойдет и будет самым быстрым вариантом.
Только если требуется потоковая передача результатов по конвейеру (для обработки один за другим без накопления результатов в памяти), вам нужно передать по каналу ForEach-Object InputObject
или Select-Object -ExpandProperty InputObject
.