New-Module

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

Syntax

New-Module
   [-ScriptBlock] <ScriptBlock>
   [-Function <String[]>]
   [-Cmdlet <String[]>]
   [-ReturnResult]
   [-AsCustomObject]
   [-ArgumentList <Object[]>]
   [<CommonParameters>]
New-Module
   [-Name] <String>
   [-ScriptBlock] <ScriptBlock>
   [-Function <String[]>]
   [-Cmdlet <String[]>]
   [-ReturnResult]
   [-AsCustomObject]
   [-ArgumentList <Object[]>]
   [<CommonParameters>]

Description

Cmdlet New-Module 會從腳本區塊建立動態模組。 動態模組的成員,例如函式和變數,可在會話中立即使用,並維持可用狀態,直到您關閉會話為止。

如同靜態模組,根據預設,動態模組中的 Cmdlet 和函式會匯出,而且變數和別名不是。 不過,您可以使用 Export-ModuleMember Cmdlet 和 的參數 New-Module 來覆寫預設值。

您也可以使用的 New-Module AsCustomObject 參數,將動態模組傳回為自定義物件。 模組的成員,例如函式,會實作為自定義物件的腳本方法,而不是匯入會話。

動態模組只存在於記憶體中,而不是存在於磁碟上。 如同所有模組,動態模組的成員會在全域範圍的子系私人模組範圍中執行。 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

此範例示範 Cmdlet 不會傳 Get-Module 回動態模組。 Cmdlet 會傳 Get-Command 回他們導出的成員。

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 使用

此範例示範您可以將動態模組管線傳送至 Import-Module,讓 動態模組可供 Get-Module 使用。

New-Module 會建立管線傳送至 Cmdlet 的 Import-Module 模組物件。 的 New-Module Name 參數會將易記名稱指派給模組。 因為 Import-Module 預設不會傳回任何物件,因此此命令沒有輸出。 Get-ModuleGreetingModule 已匯入目前的會話。

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!"

Cmdlet Get-Command 會顯示 Hello 動態模組導出的函式。

範例 5:產生具有導出函式的自定義物件

這個範例示範如何使用 的 New-Module AsCustomObject 參數來產生自定義物件,其具有代表導出函式的腳本方法。

Cmdlet New-Module 會建立具有兩個函 Hello 式和 Goodbye的動態模組。 AsCustomObject 參數會建立自定義物件,而不是預設產生的 PSModuleInfo 物件New-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 會顯示自定義物件的屬性和方法。 輸出顯示物件具有表示 和 Goodbye 函式的Hello腳本方法。 最後,我們會呼叫這些腳本方法並顯示結果。

範例 6:取得腳本區塊的結果

這個範例會使用 ReturnResult 參數來要求執行腳本區塊的結果,而不是要求模塊物件。 新模組中的腳本區塊會定義 函 SayHello 式,然後呼叫 函式。

New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult

Hello, World!

參數

-ArgumentList

指定自變數陣列,這些自變數是傳遞至腳本區塊的參數值。 如需 ArgumentList 行為的詳細資訊,請參閱about_Splatting

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsCustomObject

指出這個 Cmdlet 會傳回代表動態模組的自定義物件。 模組成員會實作為自定義物件的腳本方法,但不會匯入會話。 您可以將自定義物件儲存在變數中,並使用點表示法來叫用成員。

如果模組有多個具有相同名稱的成員,例如函式和兩個都命名為 A 的變數,則只能從自定義物件存取每個名稱的一個成員。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Cmdlet

指定此 Cmdlet 從模組匯出到目前工作階段的 Cmdlet 陣列。 輸入以逗號分隔的 Cmdlet 清單。 允許通配符。 根據預設,模組中的所有 Cmdlet 都會匯出。

您無法在腳本區塊中定義 Cmdlet,但如果動態模組從二進位模組匯入 Cmdlet,則可以包含 Cmdlet。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Function

指定此 Cmdlet 從模組匯出至目前工作階段的函式數位。 輸入以逗號分隔的函式清單。 允許通配符。 根據預設,模組中定義的所有函式都會匯出。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Name

指定新模組的名稱。 您也可以使用管線將模組名稱傳送至 New-Module。

默認值是以 開頭 __DynamicModule_ 的自動產生名稱,後面接著指定動態模組路徑的 GUID。

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ReturnResult

表示此 Cmdlet 會執行腳本區塊,並傳回腳本區塊結果,而不是傳回模組物件。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ScriptBlock

指定動態模組的內容。 以大括弧括住內容,{}以建立腳本區塊。 此為必要參數。

Type:ScriptBlock
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線將模組名稱傳送至此 Cmdlet。

輸出

PSModuleInfo

此 Cmdlet 預設會產生 PSModuleInfo 物件。

PSCustomObject

如果您使用 AsCustomObject 參數,它會產生 PSCustomObject 物件。

Object

如果您使用 ReturnResult 參數,此 Cmdlet 會傳回評估動態模組中腳本區塊的結果。

備註

PowerShell 包含下列的 New-Module別名:

  • 所有平臺:
    • nmo