当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 了解 Windows PowerShell 模块

作者:精品下载站 日期:2024-12-14 02:48:02 浏览:14 分类:玩电脑

了解 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 脚本模块。

二进制模块

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

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

清单模块

清单模块是使用清单文件来描述其所有组件的模块,但没有任何类型的核心程序集或脚本。 (正式地,清单模块将清单的 ModuleToProcessRootModule 元素留空。)但是,您仍然可以使用模块的其他功能,例如能够加载依赖程序集或自动运行某些预处理脚本。您还可以使用清单模块作为打包其他模块将使用的资源(例如嵌套模块、程序集、类型或格式)的便捷方法。有关详细信息,请参阅如何编写 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),并且脚本、二进制或清单模块文件的名称应与模块文件夹名称相同,但以下情况除外:

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

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

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

模块 Cmdlet 和变量

Windows PowerShell 提供以下 cmdlet 和变量,用于创建和管理模块。

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

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

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

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

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

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

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

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

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

参见

编写 Windows PowerShell 模块

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯