28

我即将为 Windows 管理员编写一个 PowerShell 脚本,以帮助他们完成与 Web 应用程序部署相关的某些任务。

有什么理由我应该支持或排除开发PowerShell 模块 (.psm1)而不是执行PowerShell 脚本 (.ps1)吗?

开发脚本的参数

  • 简单:我认为使用脚本对于 Windows 管理员来说更容易和更直接,因为它不需要安装模块(但我可能错了,因为我不是 Windows 管理员!)。
  • 更快的开发:开发一个模块需要更仔细地对内部方法进行编程。这就像设计一个 API 一样,因此必须更加严格。

开发模块的参数

  • 可重用性:这是首先想到的:如果管理员想要将我们的脚本集成到他自己的脚本中,他可能更容易重用暴露一个(或多个)cmdlet 的模块而不是调用我们的脚本?
  • ...

如果您知道 PS 脚本与 PS 模块的常见用例,或者每种选择的技术限制,它可能会有所帮助。

4

2 回答 2

25

要了解模块可以为您做什么,请阅读以下内容:https ://docs.microsoft.com/en-us/powershell/scripting/developer/module/writing-a-windows-powershell-module?view=powershell-7.1

简而言之,

Windows PowerShell 模块允许您将 Windows PowerShell 代码分区、组织和抽象为独立的、可重用的单元。借助这些可重用单元,管理员、脚本开发人员和 cmdlet 开发人员可以轻松地直接与他人共享他们的模块。脚本开发人员还可以重新打包第三方模块以创建基于脚本的自定义应用程序。模块,类似于 Perl 和 Python 等其他脚本语言中的模块,支持生产就绪的脚本解决方案,这些解决方案使用可重用、可再分发的组件,并具有使您能够重新打包和抽象多个组件以创建自定义解决方案的额外好处。

如果您的脚本已经具有功能并且不仅仅是为了执行单个任务而编写的,您只需将其重命名为 .PSM1 即可将其转换为模块。如果你不使用函数,当然,别无选择,只能选择 .ps1。在这种情况下,每个 .ps1 将用于执行单个任务。在与他人共享我编写的脚本时,我总是更喜欢模块。

于 2011-02-24T11:07:19.907 回答
15

我喜欢能够“隐藏”函数/变量并且只导出我想要的那些的模块。

于 2011-02-24T23:19:18.337 回答