我一直在研究一些PowerShell函数,以管理在我们创建的程序集中实现的对象。我一直在使用的一种类实现IEnumerable。不幸的是,这会导致PowerShell每次机会都展开对象。 (我无法更改该类实现IEnumerable的事实。)
我通过创建PSObject并将自定义对象的属性复制到PSObject,然后返回该属性而不是自定义对象来解决此问题。但是我真的很想返回我们的自定义对象。
是否可以通过某种方式(大概使用我的types.ps1xml文件)在PowerShell中隐藏此类的GetEnumerator()方法(否则,请告知PowerShell永远不要展开它)。
最佳答案
包装 PSObject
可能是最好的方法。
您也可以将其显式包装在另一个集合中-PowerShell仅解开一个级别。
同样,在C#/VB/...中编写cmdlet时,当您调用 WriteObject
时,请使用带有第二个参数的重载:如果为false,则PowerShell将不会枚举作为第一个参数传递的对象。
关于powershell - 使PowerShell认为对象不可枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3934930/