gpt4 book ai didi

powershell - 跨多个函数共享参数定义的模式

转载 作者:行者123 更新时间:2023-12-01 06:14:51 26 4
gpt4 key购买 nike

我正在编写一个 PowerShell 模块,其中包含一组共享一组通用参数的不同函数。有了所有的参数元数据,这些功能变得相当难以管理。对参数的一个小改动,添加一个新参数,或删除一个参数,意味着我必须去更新一堆不同的函数文件。

除了模板化代码/代码生成之外,是否有人推荐在 PowerShell 中跨多个函数共享参数定义 block 的模式?

最佳答案

我感受到了你的痛苦。我遇到过很多很多次。不幸的是,没有可以解决所有问题的出色的原生 PowerShell 解决方案。一些可能的选择:

编写测试

很简单:使用 Pester,编写测试。这不会帮助您减少必须执行的复制/粘贴或重新键入相同参数 block 的数量,但它所做的是确保如果您确实在一个地方更改了参数而忘记更改它在其他地方,或进行不兼容的更改,测试将失败。

当然,这意味着您必须以能够捕获这些问题的方式编写测试,但无论如何您都应该这样做。

我仍然没有像我应该的那样频繁地编写测试,但我认为这个选项提供了最好的整体结果,尽管它有一个很高的进入阈值。

为参数使用强类型自定义类

在某些时候,您可能会意识到需要在所有地方传递一组参数,实际上,这些参数都描述了某个单元或概念(类)的不同方面(属性)。

当您开始意识到参数相互依赖(比您在参数集上描述的更多)时,您就会认识到情况就是如此,因此您可能会开始为其编写验证并意识到它变得非常复杂。

这里的解决方案是这些参数应该是类的属性,以便负责验证的值以及属性之间的关系。 p>

当您意识到您的参数中有不止一个这样的“组”并且您需要多个对象时,这一点将变得尤为明显和重要。如果超过其中一个,编写参数集和验证就会变得更加复杂,将它们分解成类将极大地缓解这种情况。

缺点

在 PowerShell 中编写类有点糟糕。此外,没有导出在 PowerShell 模块中定义的类的好方法,这意味着您的函数知道它,但模块的使用者不知道。

反过来,这意味着您不能将该类用作公共(public)函数的参数。 There are janky ways to export it, so you could do that, but...

或者

用 C# 编写类。您无需对程序集 (.dll) 执行任何特殊操作即可在 PowerShell 中使用它,只要该类是公共(public)的即可。 Import-Module 正常工作。

当然,这是一个完全不同的开发管道、构建过程、分发等。

模板/代码生成

您触及了它,但是..说真的,不要这样做。

关于powershell - 跨多个函数共享参数定义的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062151/

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