文章目錄
- 模組、指令碼模組
- 編寫指令碼模組
- 使用指令碼模組
- 結語
現在通過編寫模組就可以在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程式員為數不多的展示工作成果的方式之一,而且是其中最專業化的方式。所以,玩兒轉模組,秀給所有人看。