PowerShell入門(十一):編寫指令碼模組

來源:互聯網
上載者:User
文章目錄
  • 模組、指令碼模組
  • 編寫指令碼模組
  • 使用指令碼模組
  • 結語

  現在通過編寫模組就可以在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> $pathsC:\Users\luke\Documents\WindowsPowerShell\ModulesC:\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.psd1cmdlet New-ModuleManifest at command pipeline position 1Supply values for the following parameters:NestedModules[0]:Author: Luke ZhangCompanyName: CaiJuCopyright:ModuleToProcess: ModuleDemo1Description: Demo1TypesToProcess[0]:FormatsToProcess[0]:RequiredAssemblies[0]:FileList[0]:

這樣模組描述檔案就建立好了,詳細資料可以開啟檔案編輯。

使用指令碼模組

  指令碼模組編寫好以後就可以使用了,載入使用指令碼模組檔案主要利用Get-Module命令和Import-Module命令。執行如下命令就能顯示出我們剛剛編寫的模組:

PS D:\> Get-Module -ListAvailableModuleType 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程式員為數不多的展示工作成果的方式之一,而且是其中最專業化的方式。所以,玩兒轉模組,秀給所有人看。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.