我目前正在整理一些Powershell cmdlet.建造它们很容易,但我不知道我是否以可接受的方式构建它们(可以这么说).
是否有任何指导/最佳实践应该遵循将数据传递到Powershell管道?目前,我实际上输出了一个DataSet类型的对象 - 如果任何cmdlet想要在下游使用它,那么它们必须遍历该DataSet中的DataTable,然后遍历每个DataTable中的DataRows.
我想问题是......我会通过这样做来打扰任何人吗?或者我应该输出本质上是一堆行的数据?
在此先感谢所有人
-jt
输出任何类型的对象最好用于表示你要写的内容是可以接受的 - 数据集绝对没问题.唯一可能的警告是,PowerShell的v2可能会发现自己在.NET Framework的简化版本上运行(例如在Server Core上),因此如果这是您的cmdlet的潜在方案,则需要谨慎使用以确保您输出的对象存在于可能使用cmdlet的每个系统上.
总而言之,管道在包含对象集合时效果最好; DataSet本身不是一个集合.换句话说,您希望下游cmdlet能够通过管道一次接收一个对象,以便这些cmdlet不必手动枚举对象.我不知道你正在做什么 - 很可能是DataSet完全合适 - 但我通常更喜欢在内部看到一个cmdlet循环通过DataSet,创建自己的自定义对象(这样表中的每一列都成为属性),并将这些对象输出到管道.这只会增加下游cmdlet的数量,这些cmdlet可以消耗你正在推出的内容.
一个简单的测试是将cmdlet的输出传递给Export-CSV.如果它有效(并且它可能不适用于DataSet),那么你通常会做正确的事情.现在,您可能需要创建一个输出DataSet的cmdlet,并且您只打算使用您编写的某些其他cmdlet(使用DataSet)来对该输出进行操作.没有错.但是,最大的灵活性是单个对象,因为它允许所有PowerShell的核心cmdlet在输出上工作.
希望有所帮助.
MSDN有一套惊人的Cmdlet开发指南,我发现它在开发自己的时候非常有用.它们分为三个不同的部分:
必要的开发指南
强烈鼓励的发展指南
咨询发展指南