#模块
#简介
模块是把函数、cmdlet、变量和别名组织在一起的单元。PowerShell 自身的大部分命令都以模块形式提供,模块可以按需加载、分发和复用。
#查看与导入模块
查看当前会话已加载的模块:
> Get-Module
列出系统中所有可用的模块:
> Get-Module -ListAvailable
导入模块后即可使用其中的命令:
> Import-Module ./MyModule.psm1
PowerShell 3.0 之后,调用模块中的命令时通常会自动导入对应模块(自动加载),一般无需手动 Import-Module。
#脚本模块
脚本模块是扩展名为 .psm1 的文件,内容是普通的 PowerShell 代码:
MyModule.psm1
function Get-Greeting {
param([string]$Name = "World")
"Hello, $Name"
}
function Get-Farewell {
param([string]$Name = "World")
"Goodbye, $Name"
}
导入并使用:
> Import-Module ./MyModule.psm1
> Get-Greeting -Name "Tom"
Hello, Tom
#Export-ModuleMember
默认情况下,脚本模块中定义的函数在导入后都可用。使用 Export-ModuleMember 可以精确控制导出内容:
MyModule.psm1
function Get-Greeting {
param([string]$Name = "World")
"Hello, $Name"
}
function Get-InternalHelper {
"仅供内部使用"
}
Export-ModuleMember -Function Get-Greeting
这样 Get-InternalHelper 不会暴露给调用者。
#模块清单
模块清单是扩展名为 .psd1 的数据文件,用于描述模块的元数据:
MyModule.psd1
@{
RootModule = 'MyModule.psm1'
ModuleVersion = '1.0.0'
GUID = '00000000-0000-0000-0000-000000000000'
Author = 'Example'
Description = '示例模块'
PowerShellVersion = '7.0'
FunctionsToExport = @('Get-Greeting')
}
模块目录的典型结构:
MyModule/
├── MyModule.psd1
└── MyModule.psm1
使用 New-ModuleManifest 可以生成清单模板,使用 Test-ModuleManifest 可以校验清单。
#PSModulePath
$env:PSModulePath 列出了 PowerShell 搜索模块的目录,多个路径之间用平台对应的分隔符连接:
> $env:PSModulePath -split [System.IO.Path]::PathSeparator
将模块放入这些目录之一,Get-Module -ListAvailable 就能自动发现它。
#查找与安装模块
PowerShell Gallery 是在线模块仓库,可以使用以下命令查找和安装模块:
> Find-Module -Name PSReadLine
> Install-Module -Name PSReadLine -Scope CurrentUser
Find-Module搜索仓库中的模块。Install-Module下载并安装模块。- 首次使用可能需要安装并信任 PowerShellGet 或 PSResourceGet。