• 【转】PowerShell入门(十一):编写脚本模块


    转至: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:Usersluke> $paths = (dir Env:PSModulePath).Value.Split(";")
    PS C:Usersluke> $paths
    C:UserslukeDocumentsWindowsPowerShellModules
    C:Windowssystem32WindowsPowerShellv1.0Modules


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

    PS C:Usersluke> 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:UserslukeDocumentsWindowsPowerShellModulesModuleDemo1> 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程序员为数不多的展示工作成果的方式之一,而且是其中最专业化的方式。所以,玩儿转模块,秀给所有人看。

  • 相关阅读:
    Python 学习笔记:需要仔细阅读一个函数
    asp.net 实现一个简单CAS Server
    用代码旋转屏幕
    Cassandra API60 Java 代码示例
    Ajax跨域访问代理类,支持GET和POST方法
    Android 给自己的类加个事件
    Python 学习笔记: 备份工具
    Android SQLiteHelper
    转:在 CLI 中練習 Data Model
    Java修饰符public,private,protected及默认的区别
  • 原文地址:https://www.cnblogs.com/keepSmile/p/5806876.html
Copyright © 2020-2023  润新知