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

Function 编写等效powershell脚本和函数的最佳实践,function,powershell,Function,Powershell,我有一个包含多个参数的脚本,我已经用适当的帮助注释(例如,大纲、.DESCRIPTION、.PARAMETER)记录了该脚本。在我的组织中,有几个不同的用户将使用此powershell脚本,有些用户知道powershell并将使用特定参数值从powershell调用它,有些用户不知道powershell,只需在Windows资源管理器中右键单击脚本文件并选择“使用powershell运行”(因此参数将使用其默认值) 我的难题是,在没有大量重复代码的情况下,在powershell中实现这一点的最佳

我有一个包含多个参数的脚本,我已经用适当的帮助注释(例如,大纲、.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资源管理器运行脚本,并且允许开发人员将脚本点源代码添加到自己的脚本中,以便他们可以访问脚本缺点是,当开发人员点源脚本时,脚本将使用默认参数调用函数(除非我允许他们向脚本提供一个可选的开关参数,以触发不调用函数)。即使这样,也意味着我必须复制所有脚本帮助文本,以便它同时显示脚本和函数(描述、参数描述等)

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

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

但是,对于希望从自己的脚本中将其用作函数的powershell用户来说,感觉很笨拙

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

但与其命名脚本
DoStuff.ps1
不如命名并调用它,使其更像一个内部函数:

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

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