建立只存在於記憶體中的新動態模組。
語法
New-Module [-Name] <string> [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>] New-Module [-ScriptBlock] <scriptblock> [-ArgumentList <Object[]>] [-AsCustomObject] [-Cmdlet <string[]>] [-Function <string[]>] [-ReturnResult] [<CommonParameters>]
描述
New-Module Cmdlet 會根據指令碼區塊建立動態模組。此動態模組的成員 (例如函數和變數) 可立即在工作階段中使用,而且其可用狀態將持續到您關閉工作階段為止。
與靜態模組一樣,系統預設將匯出動態模組中的 Cmdlet 和函數,但不匯出變數和別名。不過,您可以使用 Export-ModuleMember Cmdlet 和 New-Module 的參數來覆寫預設值。
動態模組只存在於記憶體中,不存在於磁碟。與所有模組一樣,動態模組的成員會在私人模組範圍 (屬於全域範圍的子系) 中執行。Get-Module 無法取得動態模組,但是 Get-Command 可以取得已匯出的成員。
若要讓 Get-Module 可以使用動態模組,請經由管道將 New-Module 命令輸出至 Import-Module,或是經由管道將 New-Module 傳回的模組物件輸出至 Import-Module。這個動作會將動態模組新增至 Get-Module 清單,但是不會將模組儲存到磁碟,或是讓它變成固定模組。
參數
-ArgumentList <Object[]>
指定傳遞至指令碼區塊的引數 (參數值)。
必要? |
false |
位置? |
named |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-AsCustomObject
傳回自訂物件,其成員表示模組成員。
當您使用 AsCustomObject 參數時,New-Module 會建立動態模組、將模組成員匯入至目前的工作階段,然後傳回 PSCustomObject 物件而非 PSModuleInfo 物件。您可以將自訂物件儲存到變數中,並使用點標記法來叫用成員。
如果此模組具有多個相同名稱的成員 (例如同時名為 "A" 的函數和變數),就只能從自訂物件存取具有個別名稱的單一成員。
必要? |
false |
位置? |
named |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-Cmdlet <string[]>
只將指定的 Cmdlet 從模組匯出至目前的工作階段。請輸入以逗號分隔的 Cmdlet 清單。允許使用萬用字元。根據預設,系統將匯出模組中的所有 Cmdlet。
雖然您無法在指令碼區塊中定義 Cmdlet,不過如果動態模組從二進位模組中匯入 Cmdlet,它就可以包含 Cmdlet。
必要? |
false |
位置? |
named |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
true |
-Function <string[]>
只將指定的函數從模組匯出至目前的工作階段。請輸入以逗號分隔的函數清單。允許使用萬用字元。根據預設,系統將匯出模組中定義的所有函數。
必要? |
false |
位置? |
named |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
true |
-Name <string>
指定新模組的名稱。您也可以經由管道將模組名稱輸出至 New-Module。
預設值是自動產生的名稱,其以 "__DynamicModule_" 開頭,後面再加上指定動態模組路徑的 GUID。
必要? |
true |
位置? |
1 |
預設值 |
"__DynamicModule_" + GUID |
接受管線輸入? |
true (ByValue) |
接受萬用字元? |
false |
-ReturnResult
執行指令碼區塊並傳回指令碼區塊的結果,而非傳回模組物件。
必要? |
false |
位置? |
named |
預設值 |
False |
接受管線輸入? |
false |
接受萬用字元? |
false |
-ScriptBlock <scriptblock>
指定動態模組的內容。請以大括號 ( { } ) 括住內容以建立指令碼區塊。此參數為必要項。
必要? |
true |
位置? |
1 |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.String 您可以經由管道將名稱字串輸出至 New-Module。 |
輸出 |
System.Management.Automation.PSModuleInfo、System.Management.Automation.PSCustomObject 或無 根據預設,New-Module 會產生 PSModuleInfo 物件。如果使用 AsCustomObject 參數,則會產生 PSCustomObject 物件。如果使用 ReturnResult 參數,則會傳回動態模組中指令碼區塊的評估結果。 |
附註
您也可以利用 New-Module 的別名 ("nmo") 來表示此 Cmdlet。如需詳細資訊,請參閱 about_Aliases。
範例 1
C:\PS>new-module -scriptblock {function Hello {"Hello!"}} Name : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5 Path : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5 Description : Guid : 00000000-0000-0000-0000-000000000000 Version : 0.0 ModuleBase : ModuleType : Script PrivateData : AccessMode : ReadWrite ExportedAliases : {} ExportedCmdlets : {} ExportedFunctions : {[Hello, Hello]} ExportedVariables : {} NestedModules : {} 描述 ----------- 這個命令會建立包含名為 "Hello" 之函數的新動態模組,並傳回代表新動態模組的模組物件。
範例 2
C:\PS>new-module -scriptblock {function Hello {"Hello!"}} Name : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5 Path : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5 Description : Guid : 00000000-0000-0000-0000-000000000000 Version : 0.0 ModuleBase : ModuleType : Script PrivateData : AccessMode : ReadWrite ExportedAliases : {} ExportedCmdlets : {} ExportedFunctions : {[Hello, Hello]} ExportedVariables : {} NestedModules : {} C:\PS> get-module C:\PS> C:\PS> get-command Hello CommandType Name Definition ----------- ---- ---------- Function Hello "Hello!" 描述 ----------- 這個範例會示範 Get-Module Cmdlet 不會傳回動態模組,但是 Get-Command Cmdlet 會傳回這些模組所匯出的成員。
範例 3
C:\PS>New-Module -scriptblock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp} C:\PS> $SayHelloHelp Type 'SayHello', a space, and a name. C:\PS> SayHello Jeffrey Hello, Jeffrey 描述 ----------- 這個命令會使用 Export-ModuleMember Cmdlet,將變數匯出至目前的工作階段。如果沒有使用 Export-ModuleMember 命令,就只會匯出函數。 其輸出顯示變數和函數都已匯出至工作階段。
範例 4
C:\PS>new-module -scriptblock {function Hello {"Hello!"}} -name GreetingModule | import-module C:\PS> get-module Name : GreetingModule Path : d54dfdac-4531-4db2-9dec-0b4b9c57a1e5 Description : Guid : 00000000-0000-0000-0000-000000000000 Version : 0.0 ModuleBase : ModuleType : Script PrivateData : AccessMode : ReadWrite ExportedAliases : {} ExportedCmdlets : {} ExportedFunctions : {[Hello, Hello]} ExportedVariables : {} NestedModules : {} C:\PS> get-command hello CommandType Name Definition ----------- ---- ---------- Function Hello "Hello!" 描述 ----------- 這個命令說明您可以經由管道將動態模組輸出至 Import-Module Cmdlet,讓 Get-Module Cmdlet 可以使用動態模組。 第一個命令會使用管線運算子 (|),將 New-Module 產生的模組物件傳送給 Import-Module Cmdlet。這個命令會使用 New-Module 的 Name 參數,將好記的名稱指定給模組。因為 Import-Module 預設不會傳回任何物件,所以這個命令沒有任何輸出。 第二個命令會使用 Get-Module Cmdlet 取得工作階段中的模組。其結果顯示 Get-Module 可以取得新的動態模組。 第三個命令會使用 Get-Command Cmdlet 取得動態模組所匯出的 Hello 函數。
範例 5
C:\PS>$m = new-module -scriptblock {function Hello ($name) {"Hello, $name"}; function Goodbye ($name) {"Goodbye, $name"}} -AsCustomObject C:\PS> $m C:\PS> $m | get-member TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Goodbye ScriptMethod System.Object Goodbye(); Hello ScriptMethod System.Object Hello(); PS C:\ps-test> $m.goodbye("Jane") Goodbye, Jane PS C:\ps-test> $m.hello("Manoj") Hello, Manoj PS C:\ps-test> goodbye Jane Goodbye, Jane PS C:\ps-test> hello Manoj Hello, Manoj 描述 ----------- 在這個範例中,會示範如何使用 New-Module 的 AsCustomObject 參數來產生自訂物件,其中包含表示已匯出之函數的指令碼方法。 第一個命令會使用 New-Module Cmdlet,產生具有 Hello 和 Goodbye 兩個函數的動態模組。這個命令會使用 AsCustomObject 參數來產生自訂物件,而非 New-Module 預設產生的 PSModuleInfo 物件,然後將此自訂物件儲存在 $m 變數中。 第二個命令會嘗試顯示 $m 變數的值,但不會出現任何內容。 第三個命令會使用管線運算子 (|),將自訂物件傳送給 Get-Member Cmdlet,此 Cmdlet 會顯示自訂物件的屬性和方法。其輸出顯示此物件具有表示 Hello 和 Goodbye 函數的指令碼方法。 第四和第五個命令會使用指令碼方法格式來呼叫 Hello 和 Goodbye 函數。 第六和第七個命令會指定函數名稱與參數值,藉以呼叫這些函數。
範例 6
C:\PS>new-module -scriptblock {function SayHello {"Hello, World!"}; SayHello} -returnResult Hello, World! 描述 ----------- 這個命令會使用 ReturnResult 參數來要求執行指令碼區塊的結果,而非要求模組物件。 新模組中的指令碼區塊會定義 SayHello 函數,然後呼叫此函數。
請參閱