欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell入门教程之编写和使用脚本模块实例

程序员文章站 2022-03-29 22:00:32
现在通过编写模块就可以在powershell命令行或者脚本中管理大型、分布式软件系统,就像exchange server和sharepoint server正在做的那样。你...

现在通过编写模块就可以在powershell命令行或者脚本中管理大型、分布式软件系统,就像exchange server和sharepoint server正在做的那样。你有这样的需求吗?

模块、脚本模块

  模块是powershell v2中引入的概念,用以改进之前提出的“管理单元”。将管理单元也作为模块(二进制模块)处理之后,powershell中就包括两种模块——脚本模块和二进制模块。那么什么是模块呢?模块就是包含一些powershell命令、项的程序包,它以一个整体被分发共享和加载使用。

  脚本模块是在powershell v2中与模块一起提出的概念,它完全由powershell语法和环境编写,不需要切换到其他编译语言或者开发环境。脚本模块是现在编写powershell模块时推荐的方法,要好好学哦。

编写脚本模块

  编写脚本模块包括确定模块路径、创建模块文件夹、编写模块文件和编写manifest文件等几个方面,都非常容易操作,具体内容如下:

模块安装路径

  理论上,模块可以放在本机的任何位置,但是如果放在env:\psmodulepath搜索范围内,将会更加便于管理和使用。env:\psmodulepath是与系统变量%path%具有相同建模方式的变量,其变量值是由逗号分隔的路径组成的字符串。虽然env:psmodulepath变量中有系统预定义的两个目录,但他们可能并未创建,需要在使用的时候创建。

  可以用以下命令获得两个路径:

复制代码 代码如下:

ps c:\users\luke> $paths = (dir env:\psmodulepath).value.split(";")
ps c:\users\luke> $paths
c:\users\luke\documents\windowspowershell\modules
c:\windows\system32\windowspowershell\v1.0\modules\

检查路径是否已经创建可以用如下命令:
复制代码 代码如下:

ps c:\users\luke> test-path -path $paths[0]
false

以上返回false,则表示路径未创建。创建路径可使用文件浏览器、cmd命令或者powershell命令。这里使用powershell命令如下:
复制代码 代码如下:

new-item -path $paths[0] -itemtype directory  -force

这样放置模块所需要的路径就创建好了,可以进行下一步了。

模块文件夹

  模块文件夹是模块的一个组成部分,要与模块具有相同的名字。模块所包含的模块文件、描述文件以及其他可能用到的脚本文件都要放在这个文件夹中。例如本文需要创建模块moduledemo1,可以使用上述的new-item命令或者切换到脚本路径之后使用md命令,即md moduledemo1。

脚本模块文件

  脚本模块文件与一般的脚本文件内容相似,只是后缀是.psm1而非.ps1,其文件名就是模块的名字。不过,一般来说模块中应该只包含函数、别名、变量等的定义,不应进行很多操作或者输出。moduledemo1.psm1的简单示例如下:

复制代码 代码如下:

function greet([string] name)
{
    "hello $name"
}

模块描述文件

  描述文件也称为manifest文件,扩展名是.psd1,它的文件名也要与模块相同。它的内容实际上是一个hashtable;不同的是,这个hashtable中键的名字是系统预先定义的。脚本模块文件的作用主要是限制运行环境、设置依赖项和对脚本进行一些描述。

  创建和编辑模块描述文件可以使用任何文本编辑器,但首次使用推荐使用命令进行。创建模块描述文件的命令如下:

复制代码 代码如下:

ps c:\users\luke\documents\windowspowershell\modules\moduledemo1> new-modulemanifest -path .\moduledemo1.psd1

cmdlet new-modulemanifest at command pipeline position 1
supply values for the following parameters:
nestedmodules[0]:
author: luke zhang
companyname: caiju
copyright:
moduletoprocess: moduledemo1
description: demo1
typestoprocess[0]:
formatstoprocess[0]:
requiredassemblies[0]:
filelist[0]:

这样模块描述文件就创建好了,详细信息可以打开文件编辑。

使用脚本模块

  脚本模块编写好以后就可以使用了,加载使用脚本模块文件主要利用get-module命令和import-module命令。执行如下命令就能显示出我们刚刚编写的模块:

复制代码 代码如下:

ps d:\> get-module -listavailable

moduletype name                      exportedcommands
---------- ----                      ----------------
manifest   moduledemo1               {}
manifest   adrms                     {}
manifest   applocker                 {}
manifest   bestpractices             {}
manifest   bitstransfer              {}
manifest   psdiagnostics             {}
manifest   servermanager             {}
manifest   troubleshootingpack       {}
manifest   webadministration         {}

然后导入我们刚刚编写的模块:

复制代码 代码如下:

ps d:\> import-module -name moduledemo1

导入之后,模块中定义的geet函数就可以使用了:
复制代码 代码如下:

ps d:\> greet "luke"
hello luke

如果模块中还定义了其他别名、变量等,也都可以使用。

结语

  模块不但是大型软件脚本化管理的高效解决方案,也是共享powershell命令的好办法。它是powershell程序员为数不多的展示工作成果的方式之一,而且是其中最专业化的方式。所以,玩儿转模块,秀给所有人看。