1

我有一个包含多个参数的脚本,并且我已经记录了适当的帮助注释(例如.SYNOPSIS、.DESCRIPTION、.PARAMETER)。我的组织中的几个不同的用户将使用这个 powershell 脚本,一些知道 powershell 并且会从具有特定参数值的 powershell 调用它,还有一些不知道 powershell 并且只需在 Windows 资源管理器中右键单击脚本文件并选择使用 PowerShell 运行(因此参数将使用其默认值)。

我的难题是在没有一堆重复代码的情况下,在 powershell 中执行此操作的最佳方法是什么。在我看来,这些是我的选择:

1 - 只需编写一个为所有参数提供默认值的 DoStuff.ps1 脚本。这允许它直接从 Windows 资源管理器运行,但对于想要将其用作自己脚本中的函数的 powershell 用户来说感觉很笨重,因为而不是编写:

Do-Stuff param1 param1

他们将做:

.\DoStuff.ps1 param1 param2

2 - 在 DoStuff.ps1 中,将它执行的操作移动到 DoStuff 函数中,并在函数声明之后调用 DoStuff 函数,并将参数传递到脚本中。这仍然允许从 Windows 资源管理器运行脚本,以及开发人员将脚本点源到他们自己的脚本中,以便他们可以访问该函数。不利的是,当开发人员点源脚本时,脚本将使用默认参数调用函数(除非我允许他们为脚本提供可选的 Switch 参数以触发函数不被调用)。尽管如此,这意味着我必须复制所有脚本帮助文本,以便它同时显示脚本和函数(描述、参数描述等)。

我想不出任何其他选择。理想情况下,我只能在 .ps1 文件中编写函数并使用“default”关键字标记函数,这样如果调用脚本,则默认运行该函数;但我不认为 PowerShell 提供这样的东西。

您认为在这种情况下最好的方法是什么。有什么我忽略或不知道的吗?谢谢。

4

1 回答 1

3

但是对于想要将其用作自己脚本中的函数的 powershell 用户来说感觉很笨重

根据您的描述,默认参数似乎是最好的(或者至少是最差的)方法。

但与其命名你的脚本,不如将它命名DoStuff.ps1为它并调用它,这样它就可以更像一个内部函数来调用:

  • 用破折号命名:Do-Stuff.ps1
  • 请记住,您不需要指定ps1
  • 如果脚本位于文件夹中,$env:Path则无需指定路径。

还要考虑脚本可以从相对路径加载模块:您可以将大部分代码放在前端(右键单击它)脚本加载并调用的脚本模块中。脚本作者自己加载模块。

于 2013-03-14T10:33:03.020 回答