Creating custom objects or even extending existing objects is pretty easy in PowerShell, but custom objects are harder to deal with in the pipeline and extending existing objects doesn’t seem like a good option when writing modules.
For example, let’s say I want to do more with the Get-Services cmdlet (BaseType = System.ComponentModel.Component). I can jump through a few hoops to create a custom object (call it Get-MyServices), put some of the same properties / methods into my object, and then create some new properties / methods. That is all well and good, until I want to use Get-MyServices in a pipeline in exactly the same way I would the native Get-Services cmdlet. I almost always also find that there is 1 or 2 other properties of the original object that I didn’t include that I later need.
I’m pretty sure I can’t create an object of type System.ComponentModel.Component (at least not natively in PowerShell), so is there a way to “clone” an existing object, get all of the goodness of it, extend it how I see fit, and know that when used in the pipeline, it will work exactly in the same way as its original?
If there’s another way to accomplish the same objective, I’m open to anything. I’m just trying to get the extensibility promised by OOP. Thanks.