New-Module
メモリ内にのみ存在する新しい動的モジュールを作成します。
構文
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>]
説明
New-Module
コマンドレットは、スクリプト ブロックから動的モジュールを作成します。 関数や変数などの動的モジュールのメンバーは、セッションで直ちに利用可能になり、セッションを終了するまで使用できます。
静的モジュール同様、既定では動的モジュール内のコマンドレットと関数がエクスポートされ、変数およびエイリアスはありません。 ただし、Export-ModuleMember コマンドレットと 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 の操作
この例では、動的モジュールが Get-Module
コマンドレットによって返されないことを示します。 エクスポートしたメンバーは、 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
コマンドレットを使用して、変数を現在のセッションにエクスポートします。
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
は、 Import-Module
コマンドレットにパイプされるモジュール オブジェクトを作成します。 New-Module
の Name パラメーターは、モジュールにフレンドリ名を割り当てます。 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
コマンドレットは、動的モジュールがエクスポートするHello
関数を示します。
例 5: エクスポートされた関数を含むカスタム オブジェクトを生成する
この例では、New-Module
の AsCustomObject パラメーターを使用して、エクスポートされた関数を表すスクリプト メソッドを持つカスタム オブジェクトを生成する方法を示します。
New-Module
コマンドレットは、Hello
とGoodbye
の 2 つの関数を持つ動的モジュールを作成します。 AsCustomObject パラメーターは、既定で生成New-Module
PSModuleInfo オブジェクトの代わりにカスタム オブジェクトを作成します。 このカスタム オブジェクトは、 $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
Get-Member
コマンドレットに$m
パイプすると、カスタム オブジェクトのプロパティとメソッドが表示されます。 出力は、オブジェクトに Hello
関数と Goodbye
関数を表すスクリプト メソッドがあることを示しています。
最後に、これらのスクリプト メソッドを呼び出し、結果を表示します。
例 6: スクリプト ブロックの結果を取得する
この例では、 ReturnResult パラメーターを使用して、モジュール オブジェクトを要求するのではなく、スクリプト ブロックを実行した結果を要求します。 新しいモジュールのスクリプト ブロックは、 SayHello
関数を定義し、関数を呼び出します。
New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult
Hello, World!
パラメーター
-ArgumentList
スクリプト ブロックに渡されるパラメーター値である引数の配列を指定します。 ArgumentList の動作の詳細については、about_Splattingを参照してください。
型: | Object[] |
Aliases: | Args |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-AsCustomObject
このコマンドレットによって、動的モジュールを表すカスタム オブジェクトが返されることを示します。 モジュールのメンバーは、カスタム オブジェクトのスクリプト メソッドとして実装されますが、セッションにインポートされません。 カスタム オブジェクトを変数に保存し、ドット表記を使用してメンバーを呼び出すことができます。
モジュールに同じ名前を持つ複数のメンバー (A という名前の関数と変数など) がある場合、カスタム オブジェクトからアクセスできるのは、各名前のメンバーが 1 つだけです。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Cmdlet
このコマンドレットがモジュールから現在のセッションにエクスポートするコマンドレットの配列を指定します。 コマンドレットのコンマ区切りのリストを入力します。 ワイルドカード文字を使用できます。 既定では、モジュール内のすべてのコマンドレットがエクスポートされます。
スクリプト ブロック内のコマンドレットは定義できませんが、コマンドレットがバイナリ モジュールからインポートされた場合、動的モジュールがコマンドレットを含めることができます。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Function
このコマンドレットがモジュールから現在のセッションにエクスポートする関数の配列を指定します。 関数のコンマ区切りのリストを入力します。 ワイルドカード文字を使用できます。 既定では、モジュールで定義されたすべての関数がエクスポートされます。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-Name
新しいモジュールの名前を指定します。 また、パイプを使用してモジュール名を New-Module に渡すこともできます。
既定値は自動生成された名前で、 __DynamicModule_
で始まり、動的モジュールのパスを指定する GUID が続きます。
型: | String |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-ReturnResult
このコマンドレットがスクリプト ブロックを実行し、モジュール オブジェクトを返すのではなく、スクリプト ブロックの結果を返したことを示します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ScriptBlock
動的モジュールの内容を指定します。 内容を中かっこ ({}
) で囲み、スクリプト ブロックを作成します。 このパラメーターは必須です。
型: | ScriptBlock |
配置: | 1 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
モジュール名をこのコマンドレットにパイプできます。
出力
このコマンドレットは、既定で PSModuleInfo オブジェクトを生成します。
AsCustomObject パラメーターを使用すると、PSCustomObject オブジェクトが生成されます。
ReturnResult パラメーターを使用すると、このコマンドレットは動的モジュールでスクリプト ブロックを評価した結果を返します。
メモ
PowerShell には、 New-Module
の次のエイリアスが含まれています。
- すべてのプラットフォーム:
nmo
関連リンク
PowerShell