PowerShell cmdlet开发 - 如何避免将句柄保留到输出对象

时间:2014-04-10 16:30:04

标签: powershell cmdlet

Microsoft针对Cmdlet开发的“必需开发指南”here指出Cmdlet不应保留输出对象的句柄。

但是,在开发对管道输入执行副作用的cmdlet时,可能会也可能不会修改输入对象的状态,可以通过WriteObject方法将输入对象传递到输出管道,以促进命令的进一步链接。由于管道输入参数是输入对象类型的数组,因此它仍将保留对该对象的引用。

这种行为会破坏开发合同并导致问题吗?

1 个答案:

答案 0 :(得分:1)

在你的情况下,我会说你实际上并没有保留对象的引用。 PowerShell使用InputObject属性(InputObject参数)将对象传递给您,但PowerShell正在维护该引用,而不是您。

如果您引用的规则触发了代码,则可以打开建议以改进对此错误情况的检测。

稍微改写规则 - 一旦调用WriteObject,就不应再使用该对象了。如果你有参考,你可以参考它。您可以通过以下几种有趣的方式参考:

  • 本地变量
  • 非静态字段
  • 静态字段

如果对象的最后一个引用是对WriteObject的调用,则局部变量很好。 如果非静态字段用于实现cmdlet的参数,则它们应该没有问题。 静态字段可能是个问题。