建立只存在於記憶體中的新動態模組。

語法

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 函數,然後呼叫此函數。






請參閱




目錄