一、模板构成三要素
Powershell的模板和java中的包相似,就是将很多函数进行统一归纳到一个模块当中,利于其它开发者的引入。
- 文件夹
- 清单文件
- 模块文件
下图列出的是自定义的名为Software模块的组成
二、查询模块常见位置
输入下述命令查询模块的常见位置
$env:PSModulePath
文件夹C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
中存放的是系统模块,一般不把自己写的放在这里
文件夹C:\Program Files\WindowsPowerShell\Modules
中存放的是
三、创建模块psm1文件
我们知道,Powershell的脚本文件时以.ps1
结尾,.psm1
顾名思义是Powershell模块文件。新建模块文件,名为Software.psm1,其中包含三个函数。
function Get-Software { param() } function Install-Software { param() } function Remove-Software { param() }
四、利用模板生成模块的psd1清单文件
Powershell自带的命令New-ModuleManifest可以为模板生成对应的清单文件,当然参数都是可以指定的。
New-ModuleManifest -Path '.\Software.psd1' -Author 'Chambocang' -RootModule .\Software.psm1 -Description 'This is a template module.'
生成的内容为:
# # 模块“Software”的模块清单 # # 生成者: Chambocang # # 生成时间: 2021/5/24 # @{ # 与此清单关联的脚本模块或二进制模块文件。 RootModule = '.\Software.psm1' # 此模块的版本号。 ModuleVersion = '1.0' # 支持的 PSEditions # CompatiblePSEditions = @() # 用于唯一标识此模块的 ID GUID = 'b6da06b9-2a4f-4ed7-9107-dbf74b4fcbd5' # 此模块的作者 Author = 'Chambocang' # 此模块所属的公司或供应商 CompanyName = '未知' # 此模块的版权声明 Copyright = '(c) 2021 Chambocang。保留所有权利。' # 此模块所提供功能的说明 Description = 'This is a template module.' # 此模块要求的 Windows PowerShell 引擎的最低版本 # PowerShellVersion = '' # 此模块要求的 Windows PowerShell 主机的名称 # PowerShellHostName = '' # 此模块要求的 Windows PowerShell 主机的最低版本 # PowerShellHostVersion = '' # 此模块要求使用的最低 Microsoft .NET Framework 版本。此先决条件仅对 PowerShell Desktop 版本有效。 # DotNetFrameworkVersion = '' # 此模块要求使用的最低公共语言运行时(CLR)版本。此先决条件仅对 PowerShell Desktop 版本有效。 # CLRVersion = '' # 此模块要求的处理器体系结构(无、X86、Amd64) # ProcessorArchitecture = '' # 必须在导入此模块之前先导入全局环境中的模块 # RequiredModules = @() # 导入此模块之前必须加载的程序集 # RequiredAssemblies = @() # 导入此模块之前运行在调用方环境中的脚本文件(.ps1)。 # ScriptsToProcess = @() # 导入此模块时要加载的类型文件(.ps1xml) # TypesToProcess = @() # 导入此模块时要加载的格式文件(.ps1xml) # FormatsToProcess = @() # 将作为 RootModule/ModuleToProcess 中所指定模块的嵌套模块导入的模块 # NestedModules = @() # 要从此模块中导出的函数。为了获得最佳性能,请不要使用通配符,不要删除该条目。如果没有要导出的函数,请使用空数组。 FunctionsToExport = '' # 要从此模块中导出的 cmdlet。为了获得最佳性能,请不要使用通配符,不要删除该条目。如果没有要导出的 cmdlet,请使用空数组。 CmdletsToExport = '*' # 要从此模块中导出的变量 VariablesToExport = '*' # 要从此模块中导出的别名。为了获得最佳性能,请不要使用通配符,不要删除该条目。如果没有要导出的别名,请使用空数组。 AliasesToExport = '*' # 要从此模块导出的 DSC 资源 # DscResourcesToExport = @() # 与此模块一起打包的所有模块的列表 # ModuleList = @() # 与此模块一起打包的所有文件的列表 # FileList = @() # 要传递到 RootModule/ModuleToProcess 中指定的模块的专用数据。这还可能包含 PSData 哈希表以及 PowerShell 使用的其他模块元数据。 PrivateData = @{ PSData = @{ # 应用于此模块的标记。这些标记有助于在联机库中执行模块发现。 # Tags = @() # 指向此模块的许可证的 URL。 # LicenseUri = '' # 指向此项目的主网站的 URL。 # ProjectUri = '' # 指向表示此模块的图标的 URL。 # IconUri = '' # 此模块的 ReleaseNotes # ReleaseNotes = '' } # PSData 哈希表末尾 } # PrivateData 哈希表末尾 # 此模块的 HelpInfo URI # HelpInfoURI = '' # 从此模块中导出的命令的默认前缀。可以使用 Import-Module -Prefix 覆盖默认前缀。 # DefaultCommandPrefix = '' }
五、查看模板
输入下述命令
Get-Module -Name Software -list
查询模块的结果如图所示
六、公开模块内的某个函数
修改参数FunctionsToExport
的值为Install-Software
,然后查询模块信息,如下图所示。
七、安装库中的模块
使用下述命令能够让主机下载远程库里的模块,和Linux中install
命令相似
Install-Module -Name $moduleName