博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建powershell模块
阅读量:6813 次
发布时间:2019-06-26

本文共 5465 字,大约阅读时间需要 18 分钟。

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, 然后就可以打开模板了

在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文件放进去

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

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1680494,如需转载请自行联系原作者
你可能感兴趣的文章
Hybrid小程序混合开发之路 - 数据交互
查看>>
一个技术创业者的2018年度回顾和总结 | 掘金年度征文
查看>>
专注dApp高效执行和高并发的下一代公有链
查看>>
ONE-sys 整合前后端脚手架 koa2 + pm2 + vue-cli3.0 + element
查看>>
携带更方便功能全 iPone与Apple Watch球形尿袋
查看>>
行为型模式:策略模式
查看>>
实现批量数据增强 | keras ImageDataGenerator使用
查看>>
太忙女友消息未及时回复,分手吗?python微信自动消息帮你谈恋爱
查看>>
Java 多线程NIO学习
查看>>
命名实体识别
查看>>
动态切换的动态代理
查看>>
电商项目(下)
查看>>
vue 数字滚动递增效果
查看>>
vue2.0中父子,兄弟组件的传值2
查看>>
原生js如何实现懒加载?
查看>>
Spring Boot注解常用!!!看了就可以开发大量项目了
查看>>
git修改用户名和邮箱
查看>>
使用 Hugo 搭建个人博客
查看>>
音频编码 Audio Converter
查看>>
SQL - case when then else end 的用法
查看>>