gpt4 book ai didi

Powershell cmdlet 开发最佳实践

转载 作者:行者123 更新时间:2023-12-04 01:55:40 30 4
gpt4 key购买 nike

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

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

我想问题是....我会通过这样做来阻止任何人吗?或者我应该输出本质上是一堆行的数据?

提前谢谢大家

-JT

最佳答案

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

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

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

希望有帮助。

关于Powershell cmdlet 开发最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442893/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com