次の方法で共有


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-ModuleAsCustomObject パラメーターを使用して、動的モジュールをカスタム オブジェクトとして返すこともできます。 関数などモジュールのメンバーは、セッションにインポートされる代わりに、カスタム オブジェクトのスクリプト メソッドとして実装されます。

動的モジュールは、ディスクではなくメモリにのみ存在します。 すべてのモジュール同様、動的モジュールのメンバーはグローバル スコープの子であるプライベート モジュール スコープで実行されます。 Get-Module は動的モジュールを取得できませんが、Get-Command はエクスポートされたメンバーを取得できます。

動的モジュールをGet-Moduleで使用できるようにするには、New-Module コマンドをパイプして Import-Module に接続するか、New-ModuleImport-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-ModuleName パラメーターは、モジュールにフレンドリ名を割り当てます。 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!"

Get-Command コマンドレットは、動的モジュールがエクスポートするHello関数を示します。

例 5: エクスポートされた関数を含むカスタム オブジェクトを生成する

この例では、New-ModuleAsCustomObject パラメーターを使用して、エクスポートされた関数を表すスクリプト メソッドを持つカスタム オブジェクトを生成する方法を示します。

New-Module コマンドレットは、HelloGoodbyeの 2 つの関数を持つ動的モジュールを作成します。 AsCustomObject パラメーターは、既定で生成New-ModulePSModuleInfo オブジェクトの代わりにカスタム オブジェクトを作成します。 このカスタム オブジェクトは、 $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

入力

String

モジュール名をこのコマンドレットにパイプできます。

出力

PSModuleInfo

このコマンドレットは、既定で PSModuleInfo オブジェクトを生成します。

PSCustomObject

AsCustomObject パラメーターを使用すると、PSCustomObject オブジェクトが生成されます。

Object

ReturnResult パラメーターを使用すると、このコマンドレットは動的モジュールでスクリプト ブロックを評価した結果を返します。

メモ

Windows PowerShell には、 New-Moduleの次のエイリアスが含まれています。

  • nmo

エイリアス (nmo) でNew-Moduleを参照することもできます。 詳細については、「about_Aliases」を参照してください。