转至:http://www.cnblogs.com/ceachy/archive/2013/03/08/PowerShell_Script_Module.html

  现在通过编写模块就可以在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程序员为数不多的展示工作成果的方式之一,而且是其中最专业化的方式。所以,玩儿转模块,秀给所有人看。

【转】PowerShell入门(十一):编写脚本模块的更多相关文章

  1. 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)

    https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...

  2. 26-ESP8266 SDK开发基础入门篇--编写WIFI模块 SmartConfig/Airkiss 一键配网

    https://www.cnblogs.com/yangfengwu/p/11427504.html SmartConfig/Airkiss 配网需要APP/微信公众号,这节大家先使用我做好的APP/ ...

  3. 【转】PowerShell入门(十二):编写PowerShell管理单元和二进制模块

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/13/PowerShell_SnapIn.html PowerShell一开始就提出利用管理单元来实现 ...

  4. PowerShell入门学习

    一.概要 Powershell是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境. powershell需要.NET环境的支持,同时支持.NET对象.之所以将Powershell ...

  5. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

  6. powershell入门教程-v0.3版

    powershell入门教程-v0.3版 来源 https://www.itsvse.com/thread-3650-1-1.html 参考 http://www.cnblogs.com/piapia ...

  7. 【转】PowerShell入门(十):使用配置文件

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/01/PowerShell_Profile.html 在命令行中定义别名.变量和函数,只是将它们添加在 ...

  8. 【转】PowerShell入门(三):如何快速地掌握PowerShell?

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/01/HowToLearnPowerShell.html 如何快速地掌握PowerShell呢?总的来 ...

  9. [转]使用 C 编写 Lua 模块

    Lua 作为一种小巧的语言,一般都是嵌入到 C/C++ 中作为扩展语言,但是也可以作为独立的脚本语言使用,并且可以使用 C/C++ 编写扩展模块.在参考资料 [1] 中有怎样用 C/C++ 编写模块的 ...

随机推荐

  1. c++字符串

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至 ...

  2. hibernate 异常:Unexpected Exception caught setting

    异常信息:Unexpected Exception caught setting 'outHeight' on 'class com.srpm.core.project.seismicFortific ...

  3. SQL SERVER 数据库操作脚本

    创建数据库 create Database MYDB on ( Name=mydb_dat, FileName='c:\data\mydate.mdf',size=10,maxsize=50 ) LO ...

  4. PowerGUI错误-Microsoft SharePoint is not supported with version 4 of the Microsoft .Net Runtime

    PowerGUI是个写powershell的神器,相比于PowerShell ISE,它那断点和按步追踪的能力不知让多少脚本狂们神魂颠倒.. 今天我也下载了一个放到测试环境里打算玩玩,结果出师不利,一 ...

  5. JQuery中on()函数详解

    JQuery API中定义的on方法,专业名词很多,读起来并不是那么容易,而对于开发人员知道函数怎么使用就可以了.本文将JQuery的说明翻译如下: on(events,[selector],[dat ...

  6. Mysql5.7.14安装配置

    Mysql5.7.14免安装版配置方法: 运行 在命令行中输入 mysqld install mysql5.7 安装成功后,启动mysql 在命令行中输入 net start mysql5.7 这个时 ...

  7. iOS - + initialize 与 +load

    一.+ initialize 方法和+load 调用时机 首先说一下 + initialize 方法:苹果官方对这个方法有这样的一段描述:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化 ...

  8. centos6.7下安装mvn 、安装elasticsearch下ik分词

    先说一下安装mvn步骤,如果已安装可以忽略: 在tmp目录下 1.建立mvn目录 mkdir mvn cd /tmp/mvn 2.下载 wget http://apache.fayea.com/mav ...

  9. shell-引号

    shell中的 ``(反引号) ''(单引号) ""(双引号) 反引号里面的内容赋给变量的时候 会以执行命令的方式给例如: str=`cat 1.txt` echo $str 就会 ...

  10. centos 下pip 安装snappy 系列问题记录

    试用sud o pip提示找不到pip命令,不加sudo可以找到,这时候需要使用whereis 去看pip命令的路径 sudo + pip完整路径即可 安装python  snappy 失败提示: s ...