New-Module
建立只存在於記憶體中的新動態模組。
語法
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 函數,然後呼叫此函數。
請參閱
概念
Get-Module
Import-Module
Remove-Module
Export-ModuleMember
about_Modules