编写等效的PowerShell脚本和函数的最佳实践

时间:2013-03-13 22:30:00

标签: function powershell

我有一个接受多个参数的脚本,并且我已经记录了适当的帮助注释(例如.SYNOPSIS,.DESCRIPTION,.PARAMETER)。我的组织中的几个不同的用户将使用这个powershell脚本,一些知道powershell并且会从powershell使用特定参数值调用它,还有一些不知道PowerShell并且只需在Windows资源管理器中右键单击脚本文件并选择Run with 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提供这样的东西。

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

1 个答案:

答案 0 :(得分:3)

  

但对于想要将其作为自己脚本中的函数使用的powershell用户感到笨拙

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

但是,不是命名你的脚本DoStuff.ps1来命名它并调用它,所以它可以被称为更像内部函数:

  • 使用短划线命名:Do-Stuff.ps1
  • 请记住,您无需指定ps1
  • 如果脚本位于$env:Path的文件夹中,则无需指定路径。

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

相关问题