[玩转系统] 了解和构建 PowerShell 模块
作者:精品下载站 日期:2024-12-14 20:50:35 浏览:12 分类:玩电脑
了解和构建 PowerShell 模块
使用 PowerShell 模块是 PowerShell 自动化的重要组成部分。当您开始学习 PowerShell 时,第一步通常是使用单个命令。这导致构建脚本,然后构建函数。
通过使用函数,您可以使脚本更加模块化。这使您能够在许多地方使用相同的代码,而无需在各处复制和粘贴代码。使用函数可以让您花更少的时间对使用相同代码的任何地方进行相同的编辑。相反,您可以在一个地方努力改进您的代码。
要将功能提升到一个新的水平,您可以将这些功能组合到一个模块中。
模块是扩展名为 psm1 的文本文件中的函数集合。还有一些可选的附加内容,例如模块清单和基于注释的帮助或外部帮助也可能包括在内。这些将在稍后介绍。
先决条件
我将在本文中使用 Windows PowerShell 5.1。如果您使用的是旧版本或 PowerShell Core,您的效果可能会因您看到的结果而异。
与模块交互
首次打开 PowerShell 会话后,您将从两个模块开始。第一个是Microsoft.PowerShell.Utility,它包含您已经使用的许多基本 PowerShell 函数。另一个模块是PSReadline。您可以使用 Get-Module
命令查看这些启动模块。
也就是说,这并不是所有可用模块的完整列表。从 PowerShell 3 开始,安装的模块将根据需要导入。如果您运行的是旧版本的 PowerShell,则需要先使用 Import-Module
命令导入模块,然后再使用任何命令。
有时,即使在更高版本中,您仍然希望使用 Import-Module
。如果您想在安装后导入模块,可以使用 Import-Module
,如下所示:
虽然 Get-Module
将显示所有已导入的模块,但您将看不到尚未导入的模块。然后,您可以使用 ListAvailable
参数来显示所有其他可用的模块。
默认情况下并非显示所有命令
ExportedCommands
属性包含从模块导出的所有可用命令的列表。您可能会发现此列表与模块文件中的内容之间存在一些差异。导出的命令是模块清单中内置的一项功能,允许编写者将函数隐藏。模块作者还可以使用 Export-ModuleMember
cmdlet,但这超出了本文的范围。
模块作者可能希望隐藏某个函数,因为它是为了支持其他函数,而不是面向用户。要隐藏某个函数,作者会将其从清单中的 FunctionsToExport
数组中排除。您可以在此处看到 ExportedCommands
属性的展开视图。
导入模块
开始使用模块的方法有很多。您可以使用模块文件的路径手动导入模块。这使您能够测试和更新模块,而无需做太多工作。但这不允许太多的可移植性,因为您必须使用模块的确切路径。 PowerShell 也不会自动导入不在 $env:PSModulePath
变量中的模块。
有选择地导入命令
您可以使用 Import-Module
通过使用 Function
参数仅导入特定函数,而不是整个模块。从远程系统导入模块(例如 Office 365 模块)时,这可以节省时间。
所有用户模块
为所有用户安装的模块将放置在C:\Program Files\WindowsPowerShell\Modules中。此目录包含许多预先添加的模块,包括使用默认范围 AllUsers
使用 Install-Module
安装的任何模块。
当前用户模块
如果您正在安装模块但只希望单个用户使用它,则存在 CurrentUser
范围。这会将模块文件放入位于 C:\Users\Documents\WindowsPowerShell\Modules 的文档文件夹中。这在您对文档文件夹使用文件夹重定向的环境中非常有用。
在这种情况下,您可以在一台计算机上安装模块并在另一台计算机上使用它,因为它们都共享相同的文档文件夹。
系统模块
为了完整起见,C:\Windows\System32\WindowsPowerShell\1.0\Modules 处还有一个模块目录。虽然从技术上讲,放置在此路径中的模块将像其他路径之一一样导入,但不建议这样做,因为这是为 Microsoft 的系统模块保留的。
命名很重要
您可以手动将模块放置在这些路径之一中,以使其在新会话中默认可用,但您必须确保遵循模块所需的命名。放置模块文件的文件夹必须与 psm1 模块文件和 psd1 模块清单(如果有)同名。
使用我们之前提到的 Get-Module -ListAvailable 引用这些路径。您可以使用 $env:PSModulePath -Split ';'
查看所有模块路径。您可能会注意到列表中的其他路径与此处显示的路径不同。许多程序在安装时都会添加自己的模块路径。 SQL 就是这样的例子之一,它在自己的模块路径中包含自己的模块。
还有一些模块需要使用不同的进程来安装。最重要的例子之一是 ActiveDirectory 模块。从 Windows 7 到 Windows 10 1803,您可以使用远程服务器管理工具 (RSAT) 安装程序进行安装。
在较新版本的 Windows 10 (1809+) 上,这只能通过“按需功能”获得。安装 RSAT 会安装 ActiveDirectory 模块以及许多其他可用于管理其他 Windows 角色的模块。在 Windows 服务器操作系统上,这些模块是通过服务器管理器安装的。
导入远程模块(隐式远程)
在某些情况下,让模块在本地运行是不切实际的。相反,最好连接到远程设备并导入安装在其上的模块。当您执行此操作时,命令实际上是在远程计算机上执行的。这经常与 Microsoft 的 Office 365 模块一起使用。其中许多连接到 Office 365 服务器,然后导入模块。当您运行任何命令时,它们会在远程服务器上运行,然后输出会发送回您的会话。
导入远程模块的另一个用途是当您本地没有安装该模块时。如果您没有安装 ActiveDirectory 模块,但您尝试导入它,则会得到以下结果。
要导入远程模块,您首先必须创建一个PSSession。您可以使用 New-PSSession
创建会话。然后,您可以使用 PSSession 参数和 Import-Module
导入远程设备上可用的模块。
PS51> $AdminServer = New-PSSession -ComputerName $AdminServerName -Credential (Get-Credential)
PS51> Import-Module -Name ActiveDirectory -PSSession $AdminServer -Prefix 'Rmt'
使用这种导入远程模块的方法可以在分布式环境中更快地执行代码。例如,如果您正在计算机上工作,但您正在使用的服务器遍布美国各地,则在本地对服务器运行某些命令可能需要更长的时间。而在服务器上运行命令并将输出反馈到本地会话的速度要快得多。
添加模块前缀
您还可以在从远程计算机导入的函数上添加前缀。此选项在导入本地模块时可用,但在并排测试模块的不同版本之外很少使用。
如果您运行上面的导入命令,那么您在查看命令时会看到以下内容:
在这种情况下,您可以使用前缀来表明它不是本地模块。当您导入本地也可用的模块时,可以使用此方法。添加前缀可以减少代码执行位置的混乱。
删除模块
您还可以在不使用 Remove-Module
的情况下从当前会话中删除模块。这将从本地会话中删除模块,而不删除模块文件。在使用远程会话来使用模块的情况下,您可能需要使用此选项。您可以使用 Remove-Module
清理会话,然后断开远程会话。
Remove-Module
的另一个用途是,如果您要更改模块并且不想启动新的 PowerShell 会话。在这种情况下,您可以使用 Remove-Module
,然后使用 Import-Module
将其重新加载到会话中。或者,您可以将 Force
参数与 Import-Module
结合使用。这将为您完成模块的卸载和重新加载。
PowerShell 模块的构成
一个模块可以由一个或多个文件组成。为了满足模块的最低要求,您必须有一个模块文件。这可以是 PSM1 文件或任何其他模块文件,例如二进制模块文件。为此,您的 psm1 应该在其中定义函数,否则它对任何人都没有多大用处。
虽然对于函数的外观或功能没有要求,但有一些指导原则。通常最好将模块中的所有功能都围绕同一概念构建。
模块包含相似的功能
例如,ActiveDirectory模块仅包含以某种方式与Active Directory交互的功能。通常函数名称还包含前缀。回到ActiveDirectory模块作为例子,函数名称中的所有名词都以AD开头。
使用这些指南有助于提高函数的可发现性。想象一下,您刚刚导入了这个新模块并想要通过选项卡浏览功能。如果所有函数都具有相似的名称结构,这会更容易做到。虽然您可能经常看到以 PS 开头的模块,但此前缀仅为 Microsoft 模块正式保留。如果您在模块开头使用PS,您可能不会引起问题,但可能会与另一个模块名称发生冲突。
使用这些指南,如果您有一堆与注册表交互有关的函数,您可能会得到如下内容:
function Get-ATARegistryKey {...}
function Set-ATARegistryKey {...}
模块清单
要基于文本模块文件进行构建,您还可以包含模块清单。这些文件具有 PSD1 扩展名,并包含有关模块的元数据。您可以在此处包含有关作者、模块描述、其他所需模块以及许多其他属性的信息。要发布到存储库,需要填充 Author
和 Description
字段。
以下是我们的注册表模块可能具有的清单示例:
#Module manifest for module 'ATARegistry'
#Generated by: Tyler
#Generated on: 8/11/2019
@{
#Script module or binary module file associated with this manifest.
RootModule = 'ATARegistry'
#Version number of this module.
ModuleVersion = '1.0'
#Supported PSEditions
#CompatiblePSEditions = @()
#ID used to uniquely identify this module
GUID = 'fef619fa-016d-4b11-a09d-b222e094de3e'
#Author of this module
Author = 'Tyler Muir'
#Company or vendor of this module
CompanyName = 'Adam the Automator'
#Copyright statement for this module
Copyright = '(c) 2019 tyler. All rights reserved.'
#Description of the functionality provided by this module
Description = 'This is a test module.'
#Minimum version of the Windows PowerShell engine required by this module
#PowerShellVersion = ''
#Name of the Windows PowerShell host required by this module
#PowerShellHostName = ''
#Minimum version of the Windows PowerShell host required by this module
#PowerShellHostVersion = ''
#Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
#DotNetFrameworkVersion = ''
#Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
#CLRVersion = ''
#Processor architecture (None, X86, Amd64) required by this module
#ProcessorArchitecture = ''
#Modules that must be imported into the global environment prior to importing this module
#RequiredModules = @()
#Assemblies that must be loaded prior to importing this module
#RequiredAssemblies = @()
#Script files (.ps1) that are run in the caller's environment prior to importing this module.
#ScriptsToProcess = @()
#Type files (.ps1xml) to be loaded when importing this module
#TypesToProcess = @()
#Format files (.ps1xml) to be loaded when importing this module
#FormatsToProcess = @()
#Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
#NestedModules = @()
#Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @('Get-RegistryKey','Set-RegistryKey')
#Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()
#Variables to export from this moduleVariablesToExport = '*'
#Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @()
#DSC resources to export from this module
#DscResourcesToExport = @()
#List of all modules packaged with this module
#ModuleList = @()
#List of all files packaged with this module
#FileList = @()
#Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{
PSData = @{
#Tags applied to this module. These help with module discovery in online galleries.
#Tags = @()
#A URL to the license for this module.
#LicenseUri = ''
#A URL to the main website for this project.
#ProjectUri = ''
#A URL to an icon representing this module.
#IconUri = ''
#ReleaseNotes of this module
#ReleaseNotes = ''
}
#End of PSData hashtable
}
#End of PrivateData hashtable
#HelpInfo URI of this module
#HelpInfoURI = ''
#Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
#DefaultCommandPrefix = ''
}
虽然这乍一看可能令人生畏,但 Microsoft 有一个方便的 cmdlet,您可以使用它来生成模块清单。包含的命令是New-ModuleManifest。要生成上面显示的清单,您可以使用:
PS51> New-ModuleManifest -Path .\Scripts\TestModule.psd1 -Author 'Tyler Muir' -CompanyName 'Adam the Automator' -RootModule 'TestModule.psm1' -FunctionsToExport @('Get-RegistryKey','Set-RegistryKey') -Description 'This is a test module.'
外部帮助文件
您还可能在某些模块中看到外部帮助文件。它们可以通过文件名末尾的 -Help.xml 来识别。这些外部帮助文件包含的信息与通常在函数定义中找到的基于命令的帮助中包含的信息相同。
这还需要您将 # .ExternalHelp -Help.xml
添加到您的函数中,以便在导入模块后使用 Get-Help
命令时使其正常工作。通常只看到具有非常大模块的外部帮助文件,因此它们超出了范围。
相关文件
虽然这些是您在模块中看到的最常见的文件类型,但它们并不是唯一的文件。有时,除了文本模块之外,您还会看到二进制文件,因为还有其他依赖项。通过探索模块路径,您可以在模块中找到许多其他文件类型的示例。
要正确发布非标准模块文件,您需要在模块清单的 FileList
参数中包含其他文件。
在模块清单中,您会注意到许多其他参数当前为空。您可以使用它们来定义使用模块的其他要求。例如,您可以定义模块可以使用的 PowerShell 版本。如果您尝试在不受支持的 PowerShell 版本上导入该模块,您将看到以下内容:
PS存储库
模块的关键分发选项之一是 PSRepository。从 1000 英尺的角度来看,PSRepository 是一个本地的,可供多人或多台设备访问模块文件。这些通常是您可以发布文件的 Web 服务器。
您还可以使用存储库目录,但这确实限制了存储库的功能。您可以自己托管PSRepository,也可以利用互联网上提供的众多选项之一,例如 PowerShell Gallery。您可以使用 Get-PSRepository
命令查看您的PSRepositories。
默认情况下,您只有一个条目,该条目用于 PowerShell 库。您可能会注意到它会说不受信任。这是因为 PowerShell 让您意识到,通过使用 PowerShell 库,您可能会使用未经 Microsoft 编写和批准的代码。这意味着在从中安装任何模块之前,您必须给予明确的许可。
添加 PSRepository
您还可以添加自己的存储库。要信任 PowerShell Gallery,您可以运行 Get-PSRepository -Name PSGallery | Set-PSRepository -InstallationPolicy Trusted 或者您可以在第一次从 PowerShell 库安装模块时接受警告。
您用来与这些PSRepositories交互的所有命令都可以在PowerShellGet模块中找到。您可以在这里查看功能:
在与某些存储库交互之前,可能需要更新 PowerShellGet 模块。
寻找模块
使用 PSRepository 的另一个关键功能是能够搜索模块。这是使用 Find-Module 命令完成的。有多种方法可以进行过滤以专门查找您要查找的内容,但现在您可以像这样搜索 VMware 模块:
这将显示以 VMware 开头的所有模块。虽然其中大部分来自 VMware,但您需要查看作者属性来了解谁发布了该模块。
由于任何人都可以上传到 PowerShell Gallery,因此有数千个可用模块。这意味着您可能会发现模块无法正常工作以适合您的用例。您会发现许多模块都是开源的,因此您可以为它们做出贡献以改进模块的功能。
安装模块
要使用 Install-Module
命令,您必须拥有托管该模块的可信 PSRepository。这可以是 PowerShell Gallery、另一个互联网 PSRepository 或自托管站点。您可以通过 Find-Module
命令进行管道传输,以便在安装之前轻松确认模块。
您还可以使用 MinimumVersion
、MaximumVersion
或 RequiredVersion
参数定义模块的版本。
要查看使用 Install-Module
安装的所有模块,您可以使用 Get-InstalledModule
。这将列出安装到 AllUsers
范围或您的 CurrentUser
范围的所有模块。
卸载模块
就像您可以安装模块一样,您也可以卸载模块。如果模块不是通过 Install-Module
命令安装的,则无法使用 Uninstall-Module
命令卸载它。
正如您在此处看到的,我们正在尝试卸载 ActiveDirectory 模块。由于此模块不是通过 Install-Module
安装的,因此在尝试使用 Uninstall-Module
时您会收到错误消息。为了让您卸载该模块,我们必须通过逆向安装该模块的方式来卸载它。
要查看模块是否成功卸载,您可以卸载之前安装的 VMware.PowerCLI 模块。
即使您卸载了VMware.PowerCLI,您仍然可以看到仍然安装了许多依赖项。如果您想卸载所有模块,我们可以使用 Get-InstalledModule VMware。* |卸载模块-强制。
完全卸载此模块会遇到如此困难,因为它有太多依赖项。最重要的是,其中一些模块相互依赖,这就是需要 Force
参数的原因。
更新模块
现在您已经知道如何安装和卸载模块,您可能想知道如何更新已安装的模块。
就像其他进程一样,如果模块不是使用 Install-Module
安装的,则无法使用 PowerShell 命令更新。您可以使用 Update-Module
将模块更新到最新版本或更新的特定版本。
还有一个切换到 AllowPreRelease
的功能,它允许您更新到尚未正式发布的版本。有时这会有所帮助,因为可能已经修复了您遇到的错误或添加了您想要使用的新功能。
检查/保存模块
Save-Module 是很少使用的命令之一,在使用前审查模块时非常有用。使用此命令,您可以将模块下载到某个路径,而无需安装它。
然后您可以检查这些文件,如果该模块不是二进制模块,您可以打开并查看组成该模块的代码。这不仅有助于确保模块没有做任何恶意行为,而且还有助于了解其他人如何构建其模块。
在此示例中,不仅下载了 VMware.PowerCLI 模块,还下载了所有依赖项。以下是 VMware.PowerCLI 文件夹中显示的内容:
这是一个很好的例子,展示了模块中有时如何包含非标准模块文件,例如最终用户许可协议。
编写自己的模块
您现在已经了解了如何与其他人的模块进行交互。现在您想学习如何创建自己的代码,以便可以开始优化代码以实现可扩展性。
创建模板文件
首先,您需要为所有模块文件创建一个文件夹。拥有容器后,您需要创建模块文件。您必须确保您的模块文件与您的文件夹具有相同的名称,否则在尝试发布模块时,PowerShell 将无法正确发现该模块。
PS51> New-Item -Path .\Scripts -Name ATARegistry -ItemType Directory
PS51> New-Item -Path .\Scripts\ATARegistry -Name ATARegistry.psm1
现在您还想使用清单,您还需要将其命名为与容器和模块文件相同的名称。
PS51> New-ModuleManifest -Path .\Scripts\ATARegistry\ATARegistry.psd1 -Author 'Tyler Muir' -CompanyName 'Adam the Automator' -RootModule ATARegistry.psm1 -Description 'Used for interacting with registry keys'
有了容器、模块文件和清单文件,您就拥有了一个功能齐全的模块。您可以将此模块发布到PSRepository并开始将其安装在您想要的任何地方。不过,由于模块文件是空的,它可能不会给你带来多大好处。您仍然可以使用这些文件来测试发布,以确保您的存储库正常工作。
注册PSRepository
在发布模块之前,您需要将另一个PSRepository添加到您的会话中。为了进行测试,您可以使用本地路径作为您的 PSRepository,因为它很容易设置和拆除。
通常,如果您要设置一个带有目录的PSRepository,您需要确保多台计算机可以访问它。您可以像这样创建本地存储库:
PS51> New-Item -Path C:\ -Name Repo -ItemType Directory
PS51> Register-PSRepository -Name 'LocalRepo' -SourceLocation 'C:\Repo' -PublishLocation 'C:\Repo' -InstallationPolicy Trusted
如果您仅从 PSRepository 下载并且从未发布,则可以排除 PublishLocation
参数。
发布您的模块
由于您已将安装策略设置为受信任,因此您将不会收到允许从存储库安装模块的确认消息。现在您已经有了一个新的PSRepository,您可以使用Publish-Module -Name .\Scripts\ATARegistry -Repository LocalRepo
来发布您的模块。
发布模块后,您可以使用上面的命令来查找模块并安装它。
现在您已经安装了该模块,您可以使用 Get-Module
查看导入到本地会话中的模块。由于您没有向清单中的 FunctionsToExport
数组添加任何函数,因此 ExportedCommands
属性为空。
添加到您的模块
现在您知道可以发布和安装模块了,您可以开始向其添加一些功能。您可以添加一个函数来返回注册表项,如下所示:
function Get-ATARegistryKey {
param (
[string]$Path
)
Get-Item $Path
}
如果您按原样保留清单并尝试上传新模块,您将遇到两个问题。第一个是您会收到一条错误,指出您的模块版本已存在于您的存储库中。这是因为您没有更改清单文件中的模块版本。
导出模块函数
另一个问题是,导入模块后,您在 ExportedCommands
属性中仍然看不到任何函数,因为您尚未将新函数添加到清单中。
虽然您的函数无需在 FunctionsToExport
列表中列出即可使用,但这会使查找变得更加困难。
只要您没有为 FunctionsToExport
定义空数组 @()
,所有函数、变量和别名都会默认导出。 >
要解决这两个问题,您可以像这样更新模块文件:
ModuleVersion = '1.1'
FunctionsToExport = 'Get-RegistryKey'
现在,您已向模块添加了函数,并且已更新清单以反映这些更改,您可以使用与以前相同的命令发布模块的新版本。
PS51> Publish-Module -Name .\Scripts\ATARegistry -Repository LocalRepo.
在 FunctionsToExport 和 Export-ModuleMember 之间做出选择
在导出模块成员时,PowerShell 有两个类似的功能。挑战在于在两者之间做出决定。两者都是正确的,但根据您的需要,其中一种可能更适合您。
当您希望动态控制导出哪些函数时,请使用Export-ModuleMember,因为您可以传递要导出的函数列表。通常,当点源多个单独的函数 PS1 文件时使用此功能。通过将内部函数划分为私有文件夹,将可导出函数划分为公共文件夹,您可以通过将所有公共函数传递给 Export-ModuleMember
函数来轻松导出这些函数。
关于 Export-ModuleMember 的一些注意事项:
- 覆盖
FunctionsToExport
的行为,因此,如果使用Export-ModuleMember
命令,FunctionsToExport 不起作用。 Export-ModuleMember
在没有显式定义的情况下不会导出变量和别名,这与FunctionsToExport
不同,后者会导出这些值。- 可以使用多个 Export-ModuleMember 命令,并且它们会堆叠而不是优先。
如果您不希望函数列表发生更改,则使用模块清单中的 FunctionsToExport
配置可以正常工作,并且不需要您显式导出变量和别名。
更新您的模块
最后一步是您在会话中更新模块以便能够使用更新的文件。使用 Update-Module ATARegistry
您可以下载刚刚发布到存储库的更新。
现在您可以看到您拥有该模块的新版本,并且您可以看到您在清单中定义的函数。
构建帮助内容
之前忽略的选项之一是 PowerShell 中内置的帮助系统。您可能曾经在某个函数上使用过Get-Help
。可以通过两种主要方式添加此信息。
第一个是在函数定义中添加基于注释的帮助。这通常是许多模块编写者实现的方式。另一种方法是使用外部帮助文件。您可以使用 Full
参数来显示帮助所提供的所有内容。
正如您所看到的,确实没有太多信息,而且您获得的少量信息很可能对任何人都没有帮助。
您可以向模块文件添加一些基于注释的帮助,以填充帮助系统中的这些字段。您可以使用 Get-Help about_Comment_Based_Help
了解基于评论的帮助的所有选项。
现在,您可以将函数更新为如下所示。这是最常用的帮助参数的列表,但所有这些仍然是可选的,并且可以添加其他参数。
现在你的函数看起来像这样:
function Get-RegistryKey {
<#
.SYNOPSIS
Returns registry key using provided path.
.DESCRIPTION
The function uses the Get-Item command to return the information for a provided registry key.
.PARAMETER Path
The path that will be searched for a registry key.
.EXAMPLE
Get-RegistryKey -Path 'HKLM:\HARDWARE\DESCRIPTION\System'
.INPUTS
System.String
.OUTPUTS
Microsoft.Win32.RegistryKey
.NOTES
This module is an example of what a well documented function could look.
.LINK
https://adamtheautomator.com
#>
param(
[string]$Path
)
Get-Item $Path
}
有一些特殊的帮助参数,例如 .FORWARDHELPTARGETNAME。此选项将所有传入的帮助请求转发到不同的命令。这可以用于帮助应该为多个命令显示相同信息的情况。
现在您已经添加了帮助,您可以像之前一样更新模块清单中的版本、发布新版本以及更新会话的已安装版本。
如果您现在查看该函数的帮助,您会发现有更多可用信息。这是包含有关如何使用这些函数的文档的好方法,特别是对于那些经验较少并且可能无法通过查看代码快速理解模块正在做什么的人来说。
对于外部帮助文件,添加的信息是相同的,但信息被放置在单独的文件中并在函数内链接。
如果您查看 AllUsers
模块路径,您可以看到该模块的版本以及您已安装的所有模块文件。
如果您返回到之前创建的 PSRepository 路径 C:\Repo,您可以看到一堆 NUPKG 文件。每个发布的版本都会有一个。这些是您使用 Publish-Module
时发布的内容的压缩版本。
总结
一旦您掌握了 PowerShell 控制台、PowerShell 作为一种语言并编写脚本,构建您自己的模块就是最后一步。模块允许您开始在 PowerShell 中开发有用的工具。如果通过为单一目的创建模块来正确设计和构建,随着时间的推移,您将不可避免地发现自己编写的代码越来越少。您将开始在更多代码中引用模块函数并从那里开始构建。
模块函数允许您抽象出脚本中重复的代码。它们代表了稍后在可以随时调用的代码中引用的“标签”,而不是重新发明轮子并试图弄清楚您之前是如何实现目标的。模块是 PowerShell 代码的最终“打包”,它将志同道合的代码组合在一起,以防止在已经解决的问题上浪费时间。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag