У меня есть данные, которые я получаю из источника данных, который представляет собой набор пар имя / значение, которые я храню в Dictionary
Я хочу определять класс "на лету" со свойствами, которые сопоставляются парам ключ / значение из словаря, и методами, основанными на типе данных, которые он представляет. Это позволило бы пользователю командлета получать доступ к значениям как свойствам объекта, а также вызывать для него методы.
Я вижу пример этого с Get-WmiObject. Он возвращает экземпляры ManagementObject (который, по сути, является универсальным пакетом свойств), но пользователь может получить доступ к свойствам и вызвать методы для него напрямую (т. Е. Без необходимости вызывать методы GetPropertyValue / InvokeMethod в ManagementObject).
PS C:\temp> $comp = Get-WmiObject Win32_ComputerSystem
PS C:\temp> $comp | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem
Name MemberType Definition
---- ---------- ----------
JoinDomainOrWorkgroup Method System.Management.ManagementBaseObject JoinDomainO
Rename Method System.Management.ManagementBaseObject Rename(Syst
SetPowerState Method System.Management.ManagementBaseObject SetPowerSta
UnjoinDomainOrWorkgroup Method System.Management.ManagementBaseObject UnjoinDomai
AdminPasswordStatus Property System.UInt16 AdminPasswordStatus {get;set;}
AutomaticManagedPagefile Property System.Boolean AutomaticManagedPagefile {get;set;}
AutomaticResetBootOption Property System.Boolean AutomaticResetBootOption {get;set;}
... etc ...
Как мне сделать. сделать это с моими собственными объектами?
ОБНОВЛЕНИЕ
Принятие ответа Кейта, который представляет собой общий подход .NET framework для динамической генерации кода. Это должно сработать для моего сценария, хотя я думаю, что это может быть излишним.
Я надеялся, что кто-то предоставит ясный пример того, как это можно сделать, используя средства, предоставляемые PowerShell. Похоже, должен быть способ динамического создания класса путем расширения классов PSObject , PSProperty и PSMethod , описанных в Powershell SDK ].
К сожалению, документация по этому поводу кажется довольно скудной, с множеством нелепых утверждений вроде « Хотя это можно унаследовать от этого класса, для этого не существует установленного сценария, и любая попытка сделать это может привести к неожиданным результатам. поведение. "
Что еще хуже, так это то, что все ссылки в MSDN, объясняющие систему расширенных типов PowerShell, кажутся плохими! И единственные примеры, которые я видел в сети, - это как сделать это из сценария PowerShell, а не для людей, разрабатывающих командлеты с использованием C # и SDK.
Привет, кто-нибудь из команды PowerShell слушает?