New-Module
建立只存在於記憶體中的新動態模組。
語法
ScriptBlock (預設值)
New-Module
[-ScriptBlock] <ScriptBlock>
[-Function <String[]>]
[-Cmdlet <String[]>]
[-ReturnResult]
[-AsCustomObject]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Name
New-Module
[-Name] <String>
[-ScriptBlock] <ScriptBlock>
[-Function <String[]>]
[-Cmdlet <String[]>]
[-ReturnResult]
[-AsCustomObject]
[-ArgumentList <Object[]>]
[<CommonParameters>]
Description
New-Module Cmdlet 會從腳本區塊建立動態模組。 動態模組的成員,例如函式和變數,可在會話中立即使用,並維持可用狀態,直到您關閉會話為止。
如同靜態模組,根據預設,動態模組中的 cmdlet 和函式會被匯出,而變數和別名則不會。 不過,您可以使用 Export-ModuleMember Cmdlet 和 New-Module 的參數來覆寫預設值。
您也可以使用 的 New-Module 參數,將動態模組傳回為自定義物件。 模組的成員,例如函式,會實作為自定義物件的腳本方法,而不是匯入會話。
動態模組只存在於記憶體中,而不是存在於磁碟上。 如同所有模組,動態模組的成員會在全域範圍的子系專用模組範圍中運行。 Get-Module 無法取得動態模組,但 Get-Command 可以取得導出的成員。
若要讓動態模組可供 Get-Module使用,請使用管線將 New-Module 命令傳送至 Import-Module,或使用管線將 New-Module 傳回的模組物件傳送至 Import-Module。 此動作會將動態模組新增至 Get-Module 清單,但不會將模組儲存至磁碟或讓它持續運作。
範例
範例 1:建立動態模組
此範例會建立名為 Hello函式的新動態模組。 此命令會傳回代表新動態模組的模組物件。
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 : {}
範例 2:使用動態模組和 Get-Module 和 Get-Command
此範例示範 Get-Module Cmdlet 不會傳回動態模組。 導出的成員會由 Get-Command Cmdlet 傳回。
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 : {}
Get-Module
Get-Command Hello
CommandType Name Definition
----------- ---- ----------
Function Hello "Hello!"
範例 3:將變數匯出至目前的會話
此範例會使用 Export-ModuleMember Cmdlet 將變數匯出至目前的會話。
如果沒有 Export-ModuleMember 命令,則只會匯出函式。
New-Module -ScriptBlock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp}
$SayHelloHelp
Type 'SayHello', a space, and a name.
SayHello Jeffrey
Hello, Jeffrey
輸出顯示變數和函式都已匯出至會話。
範例 4:提供動態模組給 Get-Module
此範例示範您可以將動態模組管道到 Get-Module,以便讓動態模組可供 Import-Module 使用。
New-Module 會建立一個模組物件,並將其管線傳送至 Import-Module Cmdlet。
的 New-Module 參數會將易記名稱指派給模組。 由於 Import-Module 預設不會傳回任何物件,因此此命令沒有輸出。
Get-Module,GreetingModule 已匯入目前的會話。
New-Module -ScriptBlock {function Hello {"Hello!"}} -name GreetingModule | Import-Module
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 : {}
Get-Command hello
CommandType Name Definition
----------- ---- ----------
Function Hello "Hello!"
Get-Command Cmdlet 會顯示動態模組導出的 Hello 函式。
範例 5:產生具有導出函式的自定義物件
此範例示範如何使用 New-Module 參數來產生具有表示導出函式之腳本方法的自定義物件。
New-Module Cmdlet 會建立具有兩個函式的動態模組,Hello 和 Goodbye。
AsCustomObject 參數會建立自定義物件,而不是預設產生的 PSModuleInfoNew-Module 物件。 這個自定義物件會儲存在 $m 變數中。
$m 變數似乎沒有指派的值。
$m = New-Module -ScriptBlock {
function Hello ($name) {"Hello, $name"}
function Goodbye ($name) {"Goodbye, $name"}
} -AsCustomObject
$m
$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();
$m.goodbye("Jane")
Goodbye, Jane
$m.hello("Manoj")
Hello, Manoj
$m 傳送至 Get-Member Cmdlet 可顯示自定義物件的屬性和方法。 輸出顯示物件具有代表 Hello 和 Goodbye 函式的腳本方法。
最後,我們會呼叫這些腳本方法並顯示結果。
範例 6:取得腳本區塊的結果
這個範例會使用 ReturnResult 參數來要求執行腳本區塊的結果,而不是要求模組物件。 新模組中的腳本區塊會定義 SayHello 函式,然後呼叫 函式。
New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult
Hello, World!
參數
-ArgumentList
指定自變數陣列,這些自變數是傳遞至腳本區塊的參數值。 如需 ArgumentList行為的詳細資訊,請參閱 about_Splatting。
參數屬性
| 類型: | Object[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參數 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-AsCustomObject
指出這個 Cmdlet 會傳回代表動態模組的自定義物件。 模組成員會實作為自定義物件的腳本方法,但不會匯入會話。 您可以將自定義物件儲存在變數中,並使用點表示法來叫用成員。
如果模組有多個具有相同名稱的成員,例如函式和兩個都命名為 A 的變數,則只能從自定義物件存取每個名稱的一個成員。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Cmdlet
指定此 Cmdlet 從模組匯出到目前工作階段的 Cmdlet 陣列。 輸入以逗號分隔的 Cmdlet 清單。 允許使用通配符字元。 根據預設,模組中的所有 Cmdlet 都會匯出。
您無法在腳本區塊中定義 cmdlet,但如果動態模組從二進位模組匯入 cmdlet,則可以包含 cmdlet。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Function
指定將此 cmdlet 的函式陣列從模組匯出到目前的工作階段。 輸入以逗號分隔的函式清單。 允許使用通配符字元。 根據預設,模組中定義的所有函式都會匯出。
參數屬性
| 類型: | String[] |
| 預設值: | None |
| 支援萬用字元: | True |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Name
指定新模組的名稱。 您也可以透過管線將模組名稱傳送至 New-Module。
默認值是以 __DynamicModule_ 開頭的自動產生名稱,後面接著指定動態模塊路徑的 GUID。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Name
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ReturnResult
表示此 Cmdlet 會執行腳本區塊,並傳回腳本區塊結果,而不是傳回模組物件。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ScriptBlock
指定動態模組的內容。 以大括弧括住內容({}),以建立腳本區塊。 這是必要參數。
參數屬性
| 類型: | ScriptBlock |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
String
您可以通過管道將模組名稱傳送至此 Cmdlet。
輸出
System.Management.Automation.PSModuleInfo, System.Management.Automation.PSCustomObject, or None
根據預設,此 Cmdlet 會產生 PSModuleInfo 物件。 如果您使用 AsCustomObject 參數,它會產生 PSCustomObject 物件。 如果您使用 ReturnResult 參數,它會傳回評估動態模組中腳本區塊的結果。
備註
您也可以依別名 New-Module來參考 nmo。 如需詳細資訊,請參閱 about_Aliases。