了解 Windows PowerShell 模块

模块 一组相关的Windows PowerShell功能,分组为一个方便单元 (通常保存在单个目录中) 。 通过将一组相关的脚本文件、程序集和相关资源定义为模块,可以像其他操作一样更轻松地引用、加载、保存和共享代码。

模块的主要用途是允许模块化 (,即重用和) Windows PowerShell代码。 例如,创建模块的最基本方法只是将Windows PowerShell另存为 .psm1 文件。 这样做可以控制 (,即,对脚本) 函数和变量进行公共或专用控制。 将脚本另存为 .psm1 文件还允许控制某些变量的范围。 最后,还可使用 Install-Module 等 cmdlet 来组织、安装和使用脚本作为大型解决方案的构建基块。

模块组件和类型

模块由四个基本组件组成:

  1. 某种类型的代码文件 - 通常是 PowerShell 脚本或托管 cmdlet 程序集。

  2. 上述代码文件可能需要的其他任何内容,例如其他程序集、帮助文件或脚本。

  3. 描述上述文件的清单文件,并存储诸如作者和版本控制信息的元数据。

  4. 包含上述所有内容的目录,位于 PowerShell 可以合理查找的位置。

    备注

    这些组件本身都不需要。 例如,从技术上来说,模块只能是 .psm1 文件中存储的脚本。 还可以有一个模块,该模块只是清单文件,主要用于组织目的。 还可以编写动态创建模块的脚本,因此实际上不需要目录来存储任何内容。 以下部分介绍通过混合和匹配模块的不同可能部分而获取的模块类型。

脚本模块

如名称所示,脚本模块是包含任何有效代码 () Windows PowerShell文件 .psm1 。 脚本开发人员和管理员可以使用此类型的模块来创建其成员包括函数、变量等的模块。 在中心,脚本模块只是一个Windows PowerShell扩展的脚本,它允许管理员对它使用导入、导出和管理功能。

此外,可以使用清单文件在模块中包括其他资源,例如数据文件、其他依赖模块或运行时脚本。 清单文件还可用于跟踪元数据,例如创作和版本控制信息。

最后,脚本模块与其他任何未动态创建的模块一样,需要保存在 PowerShell 可以合理发现的文件夹中。 通常,这是在 PowerShell 模块路径上;但如有必要,可以显式描述模块的安装位置。 有关详细信息,请参阅 如何编写 PowerShell 脚本模块

二进制模块

进制模块 是.NET Framework编译 () .dll 代码(如 C#)的程序集。 Cmdlet 开发人员可以使用这种类型的模块来共享 cmdlet、提供程序等。 (现有管理单元也可以用作二进制模块。) 与脚本模块相比,二进制模块允许创建速度更快或使用 (功能(如多线程) )的 cmdlet,这些 cmdlet 在 Windows PowerShell 脚本中编写代码不太容易。

与脚本模块一样,可以包含清单文件来描述模块使用的其他资源,以及跟踪有关模块的元数据。 同样,你可能应在 PowerShell 模块路径的某一文件夹中安装二进制模块。 有关详细信息,请参阅如何 编写 PowerShell 二进制模块

清单模块

清单模块 是一个模块,它使用清单文件来描述其所有组件,但没有任何类型的核心程序集或脚本。 (,清单模块将清单的 或 元素留空。) 但是,仍可以使用模块的其他功能,例如加载依赖程序集或自动运行某些预处理脚本的功能。 ModuleToProcess RootModule 还可以将清单模块用作打包其他模块将使用的资源(如嵌套模块、程序集、类型或格式)的简便方法。 有关详细信息,请参阅 如何编写 PowerShell 模块清单

动态模块

动态 模块 是未从文件加载或保存到文件的模块。 而是使用 New-Module cmdlet 通过脚本动态创建它们。 此类型的模块使脚本能够按需创建不需要加载或保存到持久存储的模块。 动态模块本质上是短期的,因此不能由 Get-Module cmdlet 访问。 同样,它们通常不需要模块清单,也不需要永久文件夹来存储其相关程序集。

模块清单

模块 清单.psd1 包含哈希表的文件。 哈希表中的键和值执行以下操作:

  • 描述模块的内容和属性。

  • 定义先决条件。

  • 确定组件的处理方式。

    模块并不一定需要清单。 模块可以引用脚本文件 () 、脚本模块文件 () 、清单文件 () 、格式设置和类型文件 .ps1 .psm1 (.psd1 .ps1xml) 、cmdlet 和提供程序程序集 (.dll) 、资源文件、帮助文件、本地化文件,或作为模块一部分捆绑的任何类型的文件或资源。 对于国际化脚本,模块文件夹还包含一组消息目录文件。 如果将清单文件添加到模块文件夹,则可以通过引用清单以单个单元来引用多个文件。

    清单本身描述了以下类别的信息:

  • 有关模块的元数据,例如模块版本号、作者和说明。

  • 导入模块所需的先决条件,例如 Windows PowerShell 版本、CLR (公共语言运行时) 以及所需的模块。

  • 处理指令,例如要处理的脚本、格式和类型。

  • 对要导出的模块的成员的限制,例如要导出的别名、函数、变量和 cmdlet。

    有关详细信息,请参阅 如何编写 PowerShell 模块清单

存储和安装模块

创建脚本、二进制或清单模块后,可以将工作保存在其他人可以访问的位置。 例如,模块可以存储在安装了 Windows PowerShell 的系统文件夹中,也可以存储在用户文件夹中。

一般而言,可以使用 变量中存储的路径之一来确定模块的安装 $ENV:PSModulePath 位置。 使用这些路径之一意味着,当用户在代码中调用模块时,PowerShell 可以自动查找和加载模块。 如果将模块存储在其他位置,可以在调用 时将模块的位置作为参数传递,以显式告知 Install-Module PowerShell。

无论如何,文件夹的路径都称为模块 (ModuleBase ) 的基,脚本、二进制文件或清单模块文件的名称应与模块文件夹名称相同,但以下情况除外:

  • 可以使用 cmdlet 的 参数命名 New-Module Name 由 cmdlet 创建的动态模块。

  • 命令从程序集对象导入 Import-Module -Assembly 的模块按照以下语法命名 "dynamic_code_module_" + assembly.GetName() :。

    有关详细信息,请参阅安装PowerShell 模块和about_PSModulePath。

模块 Cmdlet 和变量

以下 cmdlet 和变量由 Windows PowerShell模块的创建和管理提供。

New-Module cmdlet 此 cmdlet 创建仅存在于内存中的新动态模块。 模块从脚本块创建,其导出的成员(例如其函数和变量)在会话中立即可用,在会话关闭之前保持可用。

New-ModuleManifest cmdlet 此 cmdlet 创建新的模块清单 (.psd1) 文件,填充其值,将清单文件保存到指定路径。 此 cmdlet 还可用于创建可手动填充的模块清单模板。

Import-Module cmdlet 此 cmdlet 将一个或多个模块添加到当前会话中。

Get-Module cmdlet 此 cmdlet 检索有关已导入或可导入当前会话中的模块的信息。

Export-ModuleMember cmdlet 此 cmdlet 指定从脚本模块 (.psm1) 文件或使用 cmdlet 创建的动态模块导出的模块成员 (例如 cmdlet、函数、变量和别名) 。 New-Module

Remove-Module cmdlet 此 cmdlet 从当前会话中删除模块。

Test-ModuleManifest cmdlet 此 cmdlet 通过验证模块清单文件 (.psd1) 中列出的文件是否实际存在于指定路径中,来验证模块清单是否准确描述了模块的组件。

$PSScriptRoot此变量包含执行脚本模块的目录。 它使脚本能够使用模块路径访问其他资源。

$env:PSModulePath 此环境变量包含存储模块的Windows PowerShell列表。 Windows PowerShell模块自动更新模块和更新模块的帮助主题时,将使用此变量的值。

另请参阅

编写 Windows PowerShell 模块