【问题标题】:Powershell cmdlets development best practicesPowershell cmdlet 开发最佳实践
【发布时间】:2010-10-01 08:52:42
【问题描述】:

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

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

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

提前谢谢大家

-JT

【问题讨论】:

    标签: powershell cmdlets


    【解决方案1】:

    输出任何类型的对象最适合表示您正在写的内容是可以接受的——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 都可以处理您的输出。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      MSDN 有一组惊人的Cmdlet Development Guidelines,我发现在开发自己的代码时非常有用。它们分为三个不同的部分:

      【讨论】:

      • 链接都失效了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2017-10-28
      • 2011-05-05
      相关资源
      最近更新 更多