Моя первая мысль: когда вы присоединяете это свойство к объекту, вы присоединяете его к определенному экземпляру этого объекта. Когда ваша переменная теряет ссылку на этот объект, любое знание этого нового свойства теряется.
Полагаю, в следующий раз, когда вы получите этот элемент, вы создаете новый объект FunctionInfo со свойствами foo (как хранится в поставщике функций).
Когда вы вызываете Get-Item или Get-ChildItem, он возвращает ссылки на объекты на типы .NET, которые представляют базовые элементы. Эти элементы не существуют в памяти бесконечно долго (представьте себе объект FileInfo для каждого файла на каждом локальном диске и для каждого подключенного диска, живущего в памяти ... ой). Поскольку PowerShell создает новый экземпляр каждый раз, когда вы вызываете Get-Item, вы получаете базовый объект FunctionInfo.
Если вы хотите добавить свойство ко всем элементам определенного типа, вы можете это сделать с помощью расширяемой системы типов PowerShell. Вы можете создать собственный файл .ps1xml и загрузить его в сеанс PowerShell, который может добавить свойство к каждому экземпляру типа. Вот несколько замечательных примеров из блога команды разработчиков PowerShell:> Hate Add-Member и Использование расширений PowerShell для получения документации .
РЕДАКТИРОВАТЬ (адрес комментария): Я понимаю, что вы пытаетесь сделать, но ошибка происходит из-за того, что новое свойство «привито» в оболочку PSObject, которая позволяет добавлять свойства на лету. Новое свойство никогда не является частью того объекта FunctionInfo, который вы извлекаете из PSDrive.
Кроме того, поставщик функций (функция: psdrive) не имеет механизма для хранения этого дополнительного свойства. Он знает и работает с объектами FunctionInfo. Когда вы запрашиваете элемент из Function: PSDrive, поставщик Function возвращает объект FunctionInfo. Когда вы сохраняете функцию в Function: PSDrive, поставщик может хранить значения только для свойств, которые он знает, как обрабатывать. Можно написать собственный поставщик, который будет обрабатывать новые свойства из оболочки PSObject, но это не является частью функций по умолчанию в этом поставщике.
РЕДАКТИРОВАТЬ # 2: Хорошо, это меня беспокоит. Я писал об обходном пути .