11

我目前正在整理一些 Powershell cmdlet。构建它们很容易,但我不知道我是否以可接受的方式构建它们(可以这么说)。

将数据传递到 Powershell 管道时是否应遵循任何准则/最佳实践?目前,我实际上输出了一个 DataSet 类型的对象 - 如果任何 cmdlet 想要在下游使用它,那么他们将不得不遍历该 DataSet 中的 DataTables,然后遍历每个 DataTable 中的 DataRows。

我想问题是....我会这样做吗?或者我应该输出本质上是一堆行的数据?

提前谢谢大家

-JT

4

2 回答 2

9

输出最适合用来表示您正在写的内容的任何类型的对象都是可以接受的——DataSet 绝对没问题。唯一可能需要注意的是,PowerShell v2 可能会发现自己运行在 .NET Framework 的简化版本上(例如在 Server Core 上),因此如果您的 cmdlet 可能出现这种情况,您需要谨慎以确保您输出的对象存在于可能使用您的 cmdlet 的每个系统上。

话虽如此,管道在包含对象集合时效果最佳;DataSet 本身不是一个集合。换句话说,您希望下游 cmdlet 能够通过管道一次接收一个对象,这样这些 cmdlet 就不必手动枚举对象。我不太了解您在做什么-很可能是 DataSet 是完全合适的-但我通常更喜欢在内部查看通过 DataSet 的 cmdlet 循环,创建自己的自定义对象(这样表中的每一列都成为一个属性),并将这些对象输出到管道。这只会增加下游 cmdlet 的数量,这些 cmdlet 可以消耗您所发布的内容。

一个简单的测试是将 cmdlet 的输出通过管道传输到 Export-CSV。如果它有效(并且它可能不会与 DataSet 一起使用),那么您通常是在做正确的事情。现在,您可能需要创建一个输出 DataSet 的 cmdlet,并且您只打算让您编写的某些其他 cmdlet(使用 DataSet)来针对该输出进行操作。没有错。但是,最大的灵活性是单个对象,因为它使 PowerShell 的所有核心 cmdlet 都可以处理您的输出。

希望有帮助。

于 2009-01-14T15:50:59.370 回答
7

MSDN 有一组令人惊叹的Cmdlet 开发指南,我发现在开发自己的 Cmdlet 开发指南时非常有用。它们分为三个不同的部分:

于 2009-08-20T00:11:53.850 回答