Export-PSSession
別のセッションからコマンドをインポートし、Windows PowerShell モジュールに保存します。
構文
Export-PSSession [-Session] <PSSession> [-OutputModule] <string> [[-CommandName] <string[]>] [[-FormatTypeName] <string[]>] [-AllowClobber] [-ArgumentList <Object[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [-Encoding <string>] [-Force] [-Module <string[]>] [<CommonParameters>]
説明
Export-PSSession コマンドレットは、ローカルまたはリモート コンピューターの別の PSSession セッションからコマンドレット、関数、エイリアス、およびその他のコマンド タイプを取得して、Windows PowerShell のモジュールに保存します。モジュールのコマンドを現在のセッションに追加するには、Import-Module コマンドレットを使用します。
コマンドを別の PSSession から現在のセッションにインポートする Import-PSSession とは異なり、Export-PSSession はコマンドをモジュールに保存します。コマンドは現在のセッションにインポートされません。
コマンドをエクスポートするには、最初に New-PSSession コマンドレットを使用して、エクスポートするコマンドが含まれている PSSession を作成します。次に、Export-PSSession コマンドレットを使用してコマンドをエクスポートします。既定では、Export-PSSession は現在のセッションに存在するコマンド以外のすべてのコマンドをエクスポートしますが、CommandName パラメーターを使用して、エクスポートするコマンドを指定できます。
Export-PSSession コマンドレットは、Windows PowerShell の暗黙的なリモート処理機能を使用します。コマンドを現在のセッションにインポートすると暗黙的に、元のセッションで、または、元のコンピューターの同様のセッションで実行されます。
パラメーター
-AllowClobber
現在のセッションに同じ名前のコマンドがあるかどうかに関係なく、指定されたコマンドをエクスポートします。
現在のセッション内のコマンドと同じ名前のコマンドをインポートした場合、インポートされたコマンドによって元のコマンドが隠されるか、置き換えられます。詳細については、「about_Command_Precedence」を参照してください。
Export-PSSession は、現在のセッション内のコマンドと同じ名前のコマンドはインポートしません。コマンド名の競合を防ぐために、これが既定の動作となっています。
必須 |
false |
位置 |
named |
既定値 |
False |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-ArgumentList <Object[]>
指定した引数 (パラメーター値) を使用した結果得られるコマンドの変数をエクスポートします。
たとえば、$s の PSSession にある証明書 (Cert:) ドライブの Get-Item コマンドの変数をエクスポートするには、「export-pssession -session $s -command Get-Item -argumentlist cert:」と入力します。
必須 |
false |
位置 |
named |
既定値 |
なし |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-CommandName <string[]>
指定した名前または名前のパターンのコマンドのみをエクスポートします。ワイルドカードを使用できます。"CommandName" またはそのエイリアスである "Name" を使用します。
既定では、Export-PSSession は、現在のセッション内のコマンドと同じ名前のコマンドを除くすべてのコマンドを PSSession セッションからエクスポートします。このため、インポートされたコマンドによって現在のセッション内のコマンドが隠れたり、置き換えられたりすることはありません。すべてのコマンド (他のコマンドを隠したり、置き換えたりすることになるものも含む) をエクスポートするには、AllowClobber パラメーターを使用します。
CommandName パラメーターを使用する場合、FormatTypeName パラメーターを使用しない限り、コマンドの書式設定ファイルはエクスポートされません。同様に、FormatTypeName パラメーターを使用する場合、CommandName パラメーターを使用しない限り、コマンドはエクスポートされません。
必須 |
false |
位置 |
3 |
既定値 |
All commands in the session. |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
true |
-CommandType <CommandTypes>
指定したタイプのコマンド オブジェクトのみをエクスポートします。"CommandType" またはそのエイリアスである "Type" を使用します。
有効な値は次のとおりです。
-- Alias: 現在のセッションのすべての Windows PowerShell エイリアス。
-- All: すべてのコマンド タイプ。"get-command *" と同等です。
-- Application: Path 環境変数 ($env:path) に示されているパスにある Windows-PowerShell 以外のすべてのファイル (.txt、.exe、.dll など)。
-- Cmdlet: 現在のセッションのコマンドレット。既定値は "Cmdlet" です。
-- ExternalScript: Path 環境変数 ($env:path) に示されているパスにあるすべての .ps1 ファイル。
-- Filter および Function: すべての Windows PowerShell 関数。
-- Script: 現在のセッションのスクリプト ブロック。
必須 |
false |
位置 |
named |
既定値 |
All commands in the session. |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Encoding <string>
出力ファイルのエンコード方式を指定します。指定可能な値は、"Unicode"、"UTF7"、"UTF8"、"ASCII"、"UTF32"、"BigEndianUnicode"、"Default"、および "OEM" です。既定は "UTF-8" です。
必須 |
false |
位置 |
named |
既定値 |
UTF-8 |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Force
ファイルに読み取り専用属性が設定されている場合でも、既存の出力ファイルを上書きします。
必須 |
false |
位置 |
named |
既定値 |
False |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-FormatTypeName <string[]>
指定した Microsoft .NET Framework 型の書式設定命令のみをエクスポートします。型の名前を入力します。既定では、Export-PSSession は、System.Management.Automation 名前空間に存在しないすべての .NET Framework 型の書式設定命令をエクスポートします。
このパラメーターの値は、コマンドのインポート元のセッションで Get-FormatData コマンドによって返される型の名前である必要があります。リモート セッションのすべての書式設定データを取得するには、「*」と入力します。
FormatTypeName パラメーターを使用する場合、CommandName パラメーターを使用しない限り、コマンドはエクスポートされません。
同様に、CommandName パラメーターを使用する場合、FormatTypeName パラメーターを使用しない限り、コマンドの書式設定ファイルはエクスポートされません。
必須 |
false |
位置 |
4 |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Module <string[]>
指定した Windows PowerShell スナップインおよびモジュールにコマンドのみをエクスポートします。スナップインとモジュールの名前を入力します。ワイルドカードは使用できません。
詳細については、「about_PSSnapins」および「Import-Module」を参照してください。
必須 |
false |
位置 |
named |
既定値 |
All commands in the session. |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-OutputModule <string>
Export-PSSession が作成するモジュールのパス (オプション) および名前を指定します。既定のパスは $home\Documents\WindowsPowerShell\Modules です。このパラメーターは必須です。
モジュールのサブディレクトリや、Export-PSSession によって作成された既存のファイルが存在する場合、このコマンドは失敗します。既存のファイルを上書きするには、Force パラメーターを使用します。
必須 |
true |
位置 |
2 |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Session <PSSession>
コマンドのエクスポート元となる PSSession を指定します。セッション オブジェクトを含んでいる変数を入力するか、Get-PSSession コマンドなど、セッション オブジェクトを取得するコマンドを入力します。このパラメーターは必須です。
必須 |
true |
位置 |
1 |
既定値 |
なし |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
<CommonParameters>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
なし パイプを使用してオブジェクトを Export-PSSession に渡すことはできません。 |
出力 |
System.IO.FileInfo Export-PSSession は、作成されたモジュールから成るファイルの一覧を返します。 |
注
Export-PSSession は Windows PowerShell リモート処理のインフラストラクチャに依存します。このコマンドレットを使用するには、コンピューターがリモート処理用に構成されている必要があります。詳細については、「about_Remote_Requirements」を参照してください。
Export-PSSession を使用して Windows PowerShell プロバイダーをエクスポートすることはできません。
エクスポートされたコマンドは、暗黙的にエクスポート元の PSSession で実行されます。ただし、コマンドをリモート実行する際の詳細な部分は、すべて Windows PowerShell によって処理されます。エクスポートされたコマンドは、ローカルのコマンドとまったく同じように実行できます。
Export-Module は、PSSession に関する情報をキャプチャして、エクスポートしたモジュールに保存します。モジュールのインポート時に、コマンドのエクスポート元の PSSession が閉じられており、同じコンピューターにアクティブな PSSessions が存在しなかった場合、モジュール内のコマンドが PSSession の再作成を試みます。PSSession の再作成に失敗した場合、エクスポートされたコマンドは実行されません。
Export-Module によってキャプチャされ、モジュールに保存されたセッション情報には、$PSSessionOption 自動変数で指定したオプションや、New-PSSession、Enter-PSSession、Invoke-Command のいずれかのコマンドレットの SessionOption パラメーターを使って指定したオプションなど、セッションのオプションは含まれません。モジュールのインポート時に元の PSSession が閉じられていた場合、同じコンピューターに対する別の PSSession が利用可能であれば、その PSSession がモジュールによって使用されます。インポートされたコマンドを正しい構成のセッションで実行するには、必要なオプションで PSSession を作成してから、モジュールをインポートするようにしてください。
エクスポートするコマンドを検索する場合、Export-PSSession は Invoke-Command コマンドレットを使用して PSSession で Get-Command コマンドを実行します。コマンドの書式設定データを取得し、保存する場合は、Get-FormatData および Export-FormatData コマンドレットを使用します。Export-PSSession コマンドを実行すると、Invoke-Command、Get-Command、Get-FormatData、および Export-FormatData のエラー メッセージが表示される場合があります。また、Export-PSSession は、Get-Command、Get-FormatData、Select-Object、および Get-Help の各コマンドレットを含んでいないセッションからコマンドをエクスポートすることはできません。
Export-PSSession は Write-Progress コマンドレットを使用してコマンドの進行状況を表示します。コマンドの実行中は進行状況バーが表示されます。
エクスポートされたコマンドは、ユーザー インターフェイスを使用してメモ帳などのプログラムを起動できないなど、他のリモート コマンドと同じ制限があります。
Windows PowerShell プロファイルは PSSession で実行されないため、プロファイルによってセッションに追加されたコマンドは Export-PSSession では使用できません。プロファイルからコマンドをエクスポートするには、Invoke-Command コマンドを使用して、コマンドをエクスポートする前に手動で PSSession 内のプロファイルを実行します。
Export-PSSession によって作成されるモジュールには、コマンドによって書式設定データがインポートされない場合でも、書式設定ファイルが含まれることがあります。コマンドで書式設定データがインポートされない場合、作成される書式設定ファイルに書式設定データは含まれません。
例 1
C:\PS>$s = new-pssession -computerName Server01
C:\PS> export-pssession -session $s -outputModule Server01
説明
-----------
この例のコマンドは、現在のセッション内のコマンドと同じ名前のコマンドを除くすべてのコマンドを、Server01 コンピューター上の PSSession からローカル コンピューター上の Server01 モジュールにエクスポートします。コマンドの書式設定データもエクスポートされます。
最初のコマンドは Server01 コンピューターで PSSession セッションを作成します。2 番目のコマンドは、セッションのコマンドおよび書式設定データを Server01 モジュールにエクスポートします。
例 2
C:\PS>$s = new-pssession -ConnectionUri http://exchange.microsoft.com/mailbox -credential exchangeadmin01@hotmail.com -authentication negotiate
C:\PS> export-pssession -session $r -module exch* -commandname get-*, set-* -formattypename * -outputModule $pshome\Modules\Exchange -encoding ASCII
説明
-----------
これらのコマンドは、リモート コンピューター上の Microsoft Exchange Server スナップインからローカル コンピューター上の $pshome\Modules ディレクトリの Exchange モジュールに、Get コマンドと Set コマンドをエクスポートします。
モジュールを $pshome\Module ディレクトリに格納すると、コンピューターのすべてのユーザーがそのモジュールにアクセスできるようになります。
例 3
C:\PS>$s = new-pssession -computerName Server01 -credential Server01\User01
C:\PS> export-pssession -session $s -outputModule TestCmdlets -type cmdlet -commandname *test* -formattypename *
C:\PS> remove-pssession $s
C:\PS> import-module TestCmdlets
C:\PS> get-help test*
C:\PS> test-files
説明
-----------
これらのコマンドは、リモート コンピューターの PSSession からコマンドレットをエクスポートして、ローカル コンピューターのモジュールに保存します。次に、このモジュールのコマンドレットが、現在のセッションに追加されて使用できるようになります。
最初のコマンドは、Server01 コンピューターで PSSession を作成し、それを $s 変数に保存します。
2 番目のコマンドは、$s の PSSession から、名前が "Test" で始まるコマンドレットをローカル コンピューターの TestCmdlets モジュールにエクスポートします。
3 番目のコマンドは、Remove-PSSession コマンドレットを使用して、$s の PSSession を現在のセッションから削除します。このコマンドは、PSSession をアクティブにしなくても、そこからインポートされたコマンドを使用できることを示しています。
どのセッションでも随時実行できる 4 番目のコマンドは、Import-Module コマンドレットを使用して TestCmdlets モジュール内のコマンドレットを現在のセッションに追加します。
5 番目のコマンドは、Get-Help コマンドレットを使用して、名前が "Test" で始まるコマンドレットのヘルプを取得します。モジュール内のコマンドを現在のセッションに追加した後は、セッションの他のコマンドと同じように、Get-Help および Get-Command コマンドレットを使用して、インポートされたコマンドについて調べることができます。
6 番目のコマンドは、Server01 コンピューターからエクスポートされてセッションに追加された Test-Files コマンドレットを使用します。
これだけではわかりにくいですが、Test-Files コマンドが実行されるセッションは、実際には、コマンドのインポート元のコンピューターのリモート セッションです。Windows PowerShell は、モジュールに保存されている情報からセッションを作成します。
例 4
C:\PS>export-pssession -session $s -AllowClobber -outputModule AllCommands
説明
-----------
このコマンドは、$s 変数の PSSession から現在のセッションにすべてのコマンドおよびすべての書式設定データをエクスポートします。現在のセッション内のコマンドと同じ名前のコマンドを含めるために、AllowClobber パラメーターが使用されています。
例 5
C:\PS>$options = New-PSSessionOption -NoMachineProfile
C:\PS> $s = new-pssession -computername Server01 -sessionoption $options
C:\PS> export-pssession -session $s -outputModule Server01
C:\PS> remove-pssession $s
C:\PS> new-pssession -computername Server01 -sessionoption $options
C:\PS> import-module Server01
説明
-----------
この例は、コマンドのエクスポート元の PSSession が閉じていた場合に、エクスポートしたコマンドを、特定のオプションが指定されたセッションで実行する方法を示しています。
Export-PSSession を使用した場合、作成されたモジュールに元の PSSession に関する情報が保存されます。このモジュールをインポートするとき、元のリモート セッションが閉じていた場合、開いているリモート セッションのうち、元のコンピューターに接続している、いずれかのセッションがモジュールによって使用されます。
現在のセッションに元のコンピューターへのリモート セッションが存在しない場合、モジュール内のコマンドによって、そのコンピューターへのセッションが再度確立されます。ただし、Export-PSSession を実行しても、New-PSSession の SessionOption パラメーターを使用して設定されたオプションなど、特殊なオプションはモジュールに保存されません。
したがって、エクスポートされたコマンドを、特定のオプションが指定されたリモート セッションで実行する場合は、必要なオプションでリモート セッションを作成してから、モジュールをインポートする必要があります。
最初のコマンドは、New-PSSessionOption コマンドレットを使用して、PSSessionOption オブジェクトを作成し、そのオブジェクトを $options 変数に保存します。
2 番目のコマンドは、指定されたオプションを含んだ PSSession を作成します。このコマンドは、New-PSSession コマンドレットを使用して、Server01 コンピューター上に PSSession を作成します。$options 内のオプション オブジェクトを送信するために、SessionOption パラメーターが使用されています。
3 番目のコマンドは、Export-PSSession コマンドレットを使用して、$s の PSSession から、Server01 モジュールにコマンドをエクスポートします。
4 番目のコマンドは、Remove-PSSession コマンドレットを使用して、$s 変数の PSSession を削除します。
5 番目のコマンドは、New-PSSession コマンドレットを使用して、Server01 コンピューターに接続する新しい PSSession を作成します。$options 変数内のセッション オプションは、この PSSession でも使用されます。
6 番目のコマンドは、Import-Module コマンドレットを使用して、Server01 モジュールからコマンドをインポートします。モジュール内のコマンドは、Server01 コンピューター上の PSSession で実行されます。
関連項目
概念
about_Command_Precedence
Import-PSSession
New-PSSession
Import-Module
Invoke-Command
about_PSSessions