创建powershell模块

简介:

Powershell可以很容易地把自己的脚本函数做成模块以便重复使用。豆子写了个简单的函数,生成帮助文档,然后另存为ps1脚本和psm1的模块,这样就可以反复调用了。


下面是一个基本流程。


首先写了一个函数,基本功能是输入操作系统名字,获取系统里面所有匹配系统的.net 版本,powershell 版本和OS的版本


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function  get-dotnet  {
 
[ cmdletbinding ()]
 
param (
[ parameter ( mandatory = $true , position =1)] [string] $osname
)
 
 
$a = Get-ADComputer  - Filter  "operatingsystem -like '*$osname*'"  -Properties operatingsystem,ipv4address|  Where-Object { $_ .ipv4address  -ne  $null } | select -ExpandProperty name
 
 
Invoke-Command  -ComputerName  $a  {
" "| select @{name=" .Net version ";expression={
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | 
Get-ItemProperty -name Version -EA 0 |
Where-Object { $_.PSChildName -match '^(?!S)\p{L}'} | Sort-Object version -Descending | 
Select-Object -ExpandProperty Version -First 1 }
},@{name=" PowerShell Version ";e={$PSVersionTable.psversion.major}},@{name=" OS Version";expression={ [environment] ::osversion.version.build}}
} | ft
 
 
}


结果如下

1
2
3
4
5
6
7
8
9
10
11
12
PS C:\WINDOWS\system32>  get-dotnet  -osname 2012
.Net version PowerShell Version OS Version PSComputerName RunspaceId                          
------------ ------------------ ---------- -------------- ----------                          
4.5.51650                     4       9600 SYDAV01        8b5bfa95-b012-47a5-b78e-8c82d7e120ff
4.5.51650                     4       9600 SYDWSUS        08579f5c-2186-4a05-a242-55a2defea0d2
4.5.51650                     4       9600 AUSSQL01       54b0b2c0-7ae8-4587-a774-d76bea7ba10e
4.5.51650                     4       9600 SYDHARD01      52a283ed-107b-4cfb-ac94-7d183b5e37fb
4.5.51650                     4       9600 SYDSRM2012     4d25f13e-8dd0-49d6-b83e-e2c0ba2bfb69
4.5.51650                     4       9600 SYDVCS2012     28aabf1a-3165-4e78-b438-0b926df1a1a8
4.5.51650                     4       9600 AUSHELP01      0132ddd2-1586-4ebf-b80e-95b1564dc6ee
4.5.51650                     4       9600 DRVCS2012      cbb49686-d565-4afc-935a-1436462b16b7
4.5.51650                     4       9600 DRRAD2012      74ec057f-bf1d-4728-b3be-1ee9b


如果要给别人使用的话,必须添加说明,方法很简单,ISE打开一个新的窗口,输入ctrl+J, 然后就可以打开模板了

wKiom1W7CpDhctp_AAG0CyDxDn4633.jpg


在function的开头,依葫芦画瓢输入下面的信息,这样的话,Powershell 会自动的生成对应的帮助文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function  get-dotnet  {
<#
.Synopsis
    Get .net and Powershell Version from remtoe machine
.DESCRIPTION
    Get .net and Powershell and OS Version from remtoe machine
.EXAMPLE
    get-dotnet -osname 2012
    This will get the .net, powershell and OS version of connected Windows 2012 Server
.EXAMPLE
    get-dotnet -osname "2012 R2"
    This will get the .net, powershell and OS version of connected Windows 2012 R2 Server
.INPUTS
    String name of OS, such as winows 7, 2008, 2012 etc
.OUTPUTS
    Output from this cmdlet (if any)
.NOTES
    This is a test function
.COMPONENT
    The component this cmdlet belongs to Yuan Li
.ROLE
    The role this cmdlet belongs to Yuan Li
.FUNCTIONALITY
    The functionality that best describes this cmdlet
#>
 
[ cmdletbinding ()]


Powershell自动的生成了对应的帮助文档,很赞啊

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
PS C:\WINDOWS\system32> help  get-dotnet  -full
NAME
     get-dotnet
     
SYNOPSIS
     Get .net and Powershell Version from remtoe machine
     
SYNTAX
     get-dotnet  [-osname] <String> [<CommonParameters>]
     
     
DESCRIPTION
     Get .net and Powershell and OS Version from remtoe machine
     
PARAMETERS
     -osname <String>
         
         Required?                    true
         Position ?                    2
         Default  value                
         Accept pipeline input?       false
         Accept wildcard characters?  false
         
     <CommonParameters>
         This cmdlet supports the common parameters: Verbose, Debug,
         ErrorAction, ErrorVariable, WarningAction, WarningVariable,
         OutBuffer, PipelineVariable, and OutVariable.  For  more information, see 
         about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). 
     
INPUTS
     String name of OS, such as winows 7, 2008, 2012 etc
         
     
     
     
OUTPUTS
     Output from this cmdlet ( if  any)
         
     
     
     
NOTES
     
     
         This is a test  function
     
     -------------------------- EXAMPLE 1 --------------------------
     
     PS C:\> get-dotnet  -osname 2012
     
     
     This will get the .net, powershell and OS version of connected Windows 2012 Server

    

保存Powershell脚本的时候,默认的后缀是ps1。比如我另存为 get-dotnet.ps1,如果我试图调用其中的函数,我需要使用 dot source的格式,比如 

1
PS C:\scripts> . .\ get-dotnet .ps1


如果我另存为psm1的格式,那么我可以把他视作一个模块,直接导入

1
2
3
4
5
6
7
8
9
10
PS C:\scripts> 
PS C:\scripts>  Import-Module  .\ get-dotnet .psm1
PS C:\scripts>  get-module
ModuleType Version    Name                                ExportedCommands                                                                                                  
---------- -------    ----                                ----------------                                                                                                  
Script     0.0         get-dotnet                           get-dotnet                                                                                                        
Script     1.0.0.0    ISE                                 { Get-IseSnippet Import-IseSnippet New-IseSnippet }                                                               
Manifest   3.1.0.0    Microsoft.PowerShell.Management     { Add-Computer Add-Content Checkpoint-Computer Clear-Content ...}                                                
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        { Add-Member Add-Type Clear-Variable Compare-Object ...}                                                         
Script     1.0        tmp_otuyg3x2.xlk                    { Add-ADComputerServiceAccount Add-ADDomainControllerPasswordReplicationPolicy Add-ADFineGrainedPasswordPolicy ...


为了更省事,我可以直接搜索模块的默认路径,把我自定义的模块保存进去,那么每次打开ISE就会自动执行了。


比如查看当前的路径,豆子的版本是powershell5

1
2
3
4
5
6
7
8
PS C:\scripts>  $env:PSModulePath
C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\;C:\Prog
ram Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\
PS C:\scripts>  $env:PSModulePath .Split( ";" )
C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\


我直接对应的一个目录下创建一个同名的文件夹,把psm1文件放进去


wKiom1W7DiLTCRmAAAFTk7qhi_U361.jpg


重启ISE,发现模块已经自动加载了


wKioL1W7EHaSZ4z_AAJ5qkXFcKA699.jpg










本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1680494,如需转载请自行联系原作者

目录
相关文章
|
3月前
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
|
6月前
|
运维
[运维笔记] PowerShell (模块).模块清单
[运维笔记] PowerShell (模块).模块清单
74 0
[运维笔记] PowerShell (模块).模块清单
|
6月前
|
存储 运维 JavaScript
[运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
[运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布
272 0
|
Java Linux 开发者
Powershell教程(2)——自定义模块Module语法
Powershell教程(2)——自定义模块Module语法
707 0
Powershell教程(2)——自定义模块Module语法
|
1月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
39 0
|
2月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
127 10
|
6月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
202 0

相关课程

更多
下一篇
无影云桌面