Powershell教程(2)——自定义模块Module语法

简介: Powershell教程(2)——自定义模块Module语法

一、模板构成三要素


Powershell的模板和java中的包相似,就是将很多函数进行统一归纳到一个模块当中,利于其它开发者的引入。


  • 文件夹
  • 清单文件
  • 模块文件


下图列出的是自定义的名为Software模块的组成

1666150423335.jpg


二、查询模块常见位置


输入下述命令查询模块的常见位置


 $env:PSModulePath

1666150450725.jpg


文件夹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

查询模块的结果如图所示

1666150572875.jpg


六、公开模块内的某个函数


修改参数FunctionsToExport的值为Install-Software,然后查询模块信息,如下图所示。

1666150586533.jpg


七、安装库中的模块


使用下述命令能够让主机下载远程库里的模块,和Linux中install命令相似


Install-Module -Name  $moduleName
相关文章
|
28天前
|
存储 运维 JavaScript
[运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
[运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
133 0
|
28天前
|
运维
[运维笔记] PowerShell (模块).模块清单
[运维笔记] PowerShell (模块).模块清单
36 0
[运维笔记] PowerShell (模块).模块清单
|
Windows
Powershell教程(1)——函数Function语法
Powershell教程(1)——函数Function语法
227 0
Powershell教程(1)——函数Function语法
|
Web App开发 JavaScript 数据库
Docker 必备的 PowerShell 别名设置教程,轻松应对日常办公
作为一名使用 Docker 办公的程序员来说,我每天需要使用到大量的 docker 命令。通过在 PowerShell 中将这些命令处理成别名的形式,我节省了大量打字的时间以及处理拼写错误和修复拼写错误的时间。
2042 0