powershell cmdlet的动态输出类型?

时间:2014-03-09 02:58:42

标签: c# powershell cmdlets

编写cmdlet时,您可以在其上指定OutputType属性,该属性告诉管道中的下一个项目您可以从cmdlet中发出的类型。但是,有没有办法动态指定?属性不允许你做动态返回,因为它们必须是编译时间常量(除非有一些魔法)

问题是我的cmdlet实际上是通过反射发射在运行时生成类型,我希望能够公开这些类型以获得剩余链的强类型

1 个答案:

答案 0 :(得分:3)

OutputType不是合约,因此无法帮助强制执行强类型操作。 OutputType是一个提示,像Intellisense这样的工具可以利用它。这就是说,它仍然非常方便。

听起来您的cmdlet行为有点像New-Object或Get-CimInstance。 PowerShell通过检查它们的参数来确定这些cmdlet的输出类型,并且此功能不可扩展。

如果要生成一组固定的类型,我建议在OutputType中显式列出这些类型 - 您可以在OutputType中将类型指定为字符串,因此如果类型存在则无关紧要。

如果您正在生成用户定义的类型(比如您的cmdlet类似于New-Class),那么即使使用私有反射,我也看不到任何实际的解决方案。使用私有反射,我很确定你可以更新类型列表,但我认为你不能以对Intellisense有用的方式更新该列表,因为当PowerShell确定管道类型时没有好的可扩展性钩子

相关问题