次の方法で共有


Export-PSSession

別のセッションからコマンドをエクスポートし、PowerShell モジュールに保存します。

構文

Export-PSSession
      [-OutputModule] <String>
      [-Force]
      [-Encoding <Encoding>]
      [[-CommandName] <String[]>]
      [-AllowClobber]
      [-ArgumentList <Object[]>]
      [-CommandType <CommandTypes>]
      [-Module <String[]>]
      [-FullyQualifiedModule <ModuleSpecification[]>]
      [[-FormatTypeName] <String[]>]
      [-Certificate <X509Certificate2>]
      [-Session] <PSSession>
      [<CommonParameters>]

説明

Export-PSSession コマンドレットは、ローカルコンピューターまたはリモート コンピューター上の別の PowerShell セッション (PSSession) からコマンドレット、関数、エイリアス、およびその他のコマンドの種類を取得し、PowerShell モジュールに保存します。 モジュールから現在のセッションにコマンドを追加するには、Import-Module コマンドレットを使用します。

別の PSSession から現在のセッションにコマンドをインポートする Import-PSSessionとは異なり、Export-PSSession はモジュールにコマンドを保存します。 コマンドは現在のセッションにはインポートされません。

コマンドをエクスポートするには、New-PSSession コマンドレットを使用して、エクスポートするコマンドを含む PSSession を作成します。 次に、Export-PSSession コマンドレットを使用してコマンドをエクスポートします。

コマンド名の競合を防ぐために、Export-PSSession の既定値は、現在のセッションに存在するコマンドを除くすべてのコマンドをエクスポートすることです。 CommandName パラメーターを使用して、エクスポートするコマンドを指定できます。

Export-PSSession コマンドレットは、PowerShell の暗黙的なリモート処理機能を使用します。 現在のセッションにコマンドをインポートすると、元のセッションまたは元のコンピューター上の同様のセッションで暗黙的に実行されます。

例 1: PSSession からコマンドをエクスポートする

この例では、ローカル コンピューターから Server01 コンピューターに新しい PSSession を作成します。 現在のセッションに存在するものを除くすべてのコマンドは、ローカル コンピューター上の Server01 という名前のモジュールにエクスポートされます。 エクスポートには、コマンドの書式設定データが含まれます。

$S = New-PSSession -ComputerName Server01
Export-PSSession -Session $S -OutputModule Server01

New-PSSession コマンドは、Server01 コンピューターに PSSession を作成します。 PSSession は、$S 変数に格納されます。 Export-PSSession コマンドは、$S 変数のコマンドと書式設定データを Server01 モジュールにエクスポートします。

例 2: Get コマンドと Set コマンドをエクスポートする

次の使用例は、すべての Get コマンドと Set コマンドをサーバーからエクスポートします。

$newSession = @{
    ConnectionUri = 'https://exchange.microsoft.com/mailbox'
    Credential = 'exchangeadmin01@hotmail.com'
    Authentication = 'Negotiate'
}
$S = New-PSSession @newSession

$exportSession = @{
    Session = $S
    Module = 'exch*'
    CommandName = 'Get-*', 'Set-*'
    FormatTypeName = '*'
    OutputModule = "$PSHOME\Modules\Exchange"
    Encoding = 'ascii'
}

Export-PSSession @exportSession

これらのコマンドは、リモート コンピューター上の Microsoft Exchange Server スナップインから、ローカル コンピューター上の Get ディレクトリ内の Exchange モジュールに Set コマンドと $PSHOME\Modules コマンドをエクスポートします。 $PSHOME\Modules ディレクトリにモジュールを配置すると、コンピューターのすべてのユーザーがモジュールにアクセスできるようになります。

例 3: リモート コンピューターからコマンドをエクスポートする

この例では、リモート コンピューター上の PSSession からコマンドレットをエクスポートし、ローカル コンピューターのモジュールに保存します。 モジュールのコマンドレットは、使用できるように現在のセッションに追加されます。

$newSession = @{
    ComputerName = 'Server01'
    Credential = 'Server01\User01'
}
$S = New-PSSession @newSession

$exportSession = @{
    Session = $S
    OutputModule = 'TestCmdlets'
    Type = 'Cmdlet'
    CommandName = '*test*'
    FormatTypeName = '*'
}
Export-PSSession @exportSession

Remove-PSSession $S
Import-Module TestCmdlets
Get-Help Test*
Test-Files

New-PSSession コマンドは、Server01 コンピューターに PSSession を作成し、$S 変数に保存します。 Export-PSSession コマンドは、名前が Test で始まるコマンドレットを、$S の PSSession からローカル コンピューターの TestCmdlets モジュールにエクスポートします。

Remove-PSSession コマンドレットは、$S の PSSession を現在のセッションから削除します。 このコマンドは、セッションからインポートされたコマンドを使用するために PSSession をアクティブにする必要がないことを示しています。 Import-Module コマンドレットは、TestCmdlets モジュールのコマンドレットを現在のセッションに追加します。 コマンドはいつでも任意のセッションで実行できます。

Get-Help コマンドレットは、名前が Test で始まるコマンドレットのヘルプを取得します。 モジュール内のコマンドが現在のセッションに追加されたら、Get-Help コマンドレットと Get-Command コマンドレットを使用して、インポートされたコマンドについて学習できます。 Test-Files コマンドレットは Server01 コンピューターからエクスポートされ、セッションに追加されました。 Test-Files コマンドレットは、コマンドのインポート元のコンピューター上のリモート セッションで実行されます。 PowerShell は、TestCmdlets モジュールに格納されている情報からセッションを作成します。

例 4: 現在のセッションでのエクスポートコマンドと clobber コマンド

この例では、変数に格納されているコマンドを現在のセッションにエクスポートします。

Export-PSSession -Session $S -AllowClobber -OutputModule AllCommands

この Export-PSSession コマンドは、$S 変数の PSSession から現在のセッションにすべてのコマンドとすべての書式設定データをエクスポートします。 AllowClobber パラメーターには、現在のセッションのコマンドと同じ名前のコマンドが含まれています。

例 5: 閉じた PSSession からコマンドをエクスポートする

この例では、エクスポートされたコマンドを作成した PSSession が閉じられたときに、特殊なオプションを指定してエクスポートされたコマンドを実行する方法を示します。

モジュールのインポート時に元のリモート セッションが閉じられた場合、モジュールは、元のコンピューターに接続する開いているリモート セッションを使用します。 元のコンピューターへの現在のセッションがない場合、モジュールはセッションを再確立します。

リモート セッションで特殊なオプションを指定してエクスポートされたコマンドを実行するには、モジュールをインポートする前に、これらのオプションを使用してリモート セッションを作成する必要があります。 New-PSSession パラメーターで コマンドレットを使用する

$Options = New-PSSessionOption -NoMachineProfile
$S = New-PSSession -ComputerName Server01 -SessionOption $Options
Export-PSSession -Session $S -OutputModule Server01
Remove-PSSession $S
New-PSSession -ComputerName Server01 -SessionOption $Options
Import-Module Server01

New-PSSessionOption コマンドレットは、PSSessionOption オブジェクトを作成し、そのオブジェクトを $Options 変数に保存します。 New-PSSession コマンドは、Server01 コンピューターに PSSession を作成します。 SessionOption パラメーターは、$Optionsに格納されているオブジェクトを使用します。 セッションは、$S 変数に格納されます。

Export-PSSession コマンドレットは、$S の PSSession から Server01 モジュールにコマンドをエクスポートします。 Remove-PSSession コマンドレットは、$S 変数の PSSession を削除します。

New-PSSession コマンドレットは、Server01 コンピューターに接続する新しい PSSession を作成します。 SessionOption パラメーターは、$Optionsに格納されているオブジェクトを使用します。 Import-Module コマンドレットは、Server01 モジュールからコマンドをインポートします。 モジュール内のコマンドは、Server01 コンピューターの PSSession で実行されます。

パラメーター

-AllowClobber

現在のセッションのコマンドと同じ名前を持つ場合でも、指定したコマンドをエクスポートします。

現在のセッションのコマンドと同じ名前のコマンドをエクスポートすると、エクスポートされたコマンドは元のコマンドを非表示または置換します。 詳細については、about_Command_Precedenceを参照してください。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ArgumentList

指定した引数 (パラメーター値) を使用した結果のコマンドのバリアントをエクスポートします。

たとえば、pssession の証明書 (Cert:) ドライブの Get-Item コマンドのバリアントを $Sにエクスポートするには、「Export-PSSession -Session $S -Command Get-Item -ArgumentList Cert:」と入力します。

型:Object[]
Aliases:Args
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Certificate

フォーマット ファイル (*) の署名に使用するクライアント証明書を指定します。Format.ps1xml) またはスクリプト モジュール ファイル (.psm1) Export-PSSession 作成するモジュール内。 証明書を含む変数、または証明書を取得するコマンドまたは式を入力します。

証明書を検索するには、Get-PfxCertificate コマンドレットを使用するか、証明書 (Cert:) ドライブの Get-ChildItem コマンドレットを使用します。 証明書が有効でない場合、または十分な権限を持っていない場合、コマンドは失敗します。

型:X509Certificate2
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-CommandName

指定した名前または名前パターンを持つコマンドのみをエクスポートします。 ワイルドカードを使用できます。 CommandName またはそのエイリアス 名前 使用します。

既定では、Export-PSSession は、現在のセッションのコマンドと同じ名前を持つコマンドを除き、PSSession からすべてのコマンドをエクスポートします。 これにより、現在のセッションでコマンドが非表示にされたり、コマンドに置き換えられるのを防ぐことができます。 他のコマンドを非表示または置換するコマンドであっても、すべてのコマンドをエクスポートするには、AllowClobber パラメーターを使用します。

CommandName パラメーターを使用する場合、FormatTypeName パラメーターを使用しない限り、コマンドの書式設定ファイルはエクスポートされません。 同様に、FormatTypeName パラメーターを使用する場合、CommandName パラメーターを使用しない限り、コマンドはエクスポートされません。

型:String[]
Aliases:Name
配置:2
規定値:All commands in the session.
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-CommandType

指定した種類のコマンド オブジェクトのみをエクスポートします。 CommandType またはそのエイリアス 使用します。

このパラメーターに使用できる値は次のとおりです。

  • Alias: 現在のセッションのすべての PowerShell エイリアス。
  • All: すべてのコマンドの種類。 これは Get-Command -Name *に相当します。
  • Application: .txt、.exe、.dll ファイルを含む、PATH 環境変数 ($Env:PATH) に一覧表示されているパス内の PowerShell ファイル以外のすべてのファイル。
  • Cmdlet: 現在のセッションのコマンドレット。 コマンドレットが既定値です。
  • Configuration: PowerShell 構成。 詳細については、about_Session_Configurationsを参照してください。
  • ExternalScript: PATH 環境変数 (.ps1) に一覧表示されているパス内のすべての $Env:PATH ファイル。
  • FilterFunction: すべての PowerShell 関数。
  • Script スクリプトは、現在のセッションでブロックします。
  • PowerShell ワークフローを Workflow します。 詳細については、about_Workflowsを参照してください。

これらの値は、フラグ ベースの列挙体として定義されます。 このパラメーターを使用して、複数の値を組み合わせて複数のフラグを設定できます。 値は、CommandType パラメーターに値の配列として、またはそれらの値のコンマ区切り文字列として渡すことができます。 コマンドレットは、バイナリ OR 操作を使用して値を結合します。 配列として値を渡すことは最も簡単なオプションであり、値にタブ補完を使用することもできます。

型:CommandTypes
Aliases:Type
指定可能な値:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
配置:Named
規定値:All commands in the session.
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Encoding

ターゲット ファイルのエンコードの種類を指定します。 既定値は utf8NoBOMです。

このパラメーターに使用できる値は次のとおりです。

  • ascii: ASCII (7 ビット) 文字セットのエンコードを使用します。
  • ansi: 現在のカルチャの ANSI コード ページのエンコードを使用します。 このオプションは PowerShell 7.4 で追加されました。
  • bigendianunicode: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • bigendianutf32: ビッグ エンディアンバイト順を使用して UTF-32 形式でエンコードします。
  • oem: MS-DOS およびコンソール プログラムの既定のエンコードを使用します。
  • unicode: リトル エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • utf7: UTF-7 形式でエンコードします。
  • utf8: UTF-8 形式でエンコードします。
  • utf8BOM: バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。
  • utf8NoBOM: バイト オーダー マーク (BOM) なしで UTF-8 形式でエンコードします
  • utf32: UTF-32 形式でエンコードします。

PowerShell 6.2 以降では、Encoding パラメーターを使用すると、登録済みのコード ページ (-Encoding 1251など) の数値 ID や、登録されたコード ページの文字列名 (-Encoding "windows-1251"など) も使用できます。 詳細については、Encoding.CodePageの .NET ドキュメントを参照してください。

PowerShell 7.4 以降では、Ansi パラメーターの 値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。

手記

UTF-7 *使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、utf7 パラメーターに を指定すると警告が書き込まれます。

型:Encoding
指定可能な値:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
配置:Named
規定値:UTF8NoBOM
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Force

ファイルに読み取り専用属性がある場合でも、1 つ以上の既存の出力ファイルを上書きします。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-FormatTypeName

指定した Microsoft .NET Framework 型の書式設定命令のみをエクスポートします。 型名を入力します。 既定では、Export-PSSession は、System.Management.Automation 名前空間に含まれていないすべての .NET Framework 型の書式設定命令をエクスポートします。

このパラメーターの値は、コマンドのインポート元のセッションで Get-FormatData コマンドによって返される型の名前である必要があります。 リモート セッションのすべての書式設定データを取得するには、「*」と入力します。

FormatTypeName パラメーターを使用する場合、CommandName パラメーターを使用しない限り、コマンドはエクスポートされません。

CommandName パラメーターを使用する場合、FormatTypeName パラメーターを使用しない限り、コマンドの書式設定ファイルはエクスポートされません。

型:String[]
配置:3
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-FullyQualifiedModule

値には、モジュール名、完全なモジュール仕様、またはモジュール ファイルへのパスを指定できます。

値がパスの場合、パスは完全修飾または相対パスにすることができます。 相対パスは、using ステートメントを含むスクリプトを基準にして解決されます。

値が名前またはモジュールの指定である場合、PowerShell は指定されたモジュールの PSModulePath を検索します。

モジュール仕様は、次のキーを持つハッシュテーブルです。

  • ModuleName - 必須 モジュール名を指定します。
  • GUID - 省略可能 モジュールの GUID を指定します。
  • また、以下の 3 つのキーのうち少なくとも 1 つを指定する必要
    • ModuleVersion - モジュールの最小許容バージョンを指定します。
    • MaximumVersion - モジュールの許容される最大バージョンを指定します。
    • RequiredVersion - モジュールの正確で必要なバージョンを指定します。 これは、他のバージョン キーでは使用できません。

Module パラメーターと同じコマンドで、FullyQualifiedModule パラメーターを指定することはできません。 2 つのパラメーターは相互に排他的です。

型:ModuleSpecification[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Module

指定した PowerShell スナップインとモジュール内のコマンドのみをエクスポートします。 スナップインとモジュール名を入力します。 ワイルドカードは使用できません。

詳細については、「Import-Moduleabout_PSSnapins」を参照してください。

型:String[]
Aliases:PSSnapin
配置:Named
規定値:All commands in the session.
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-OutputModule

Export-PSSessionによって作成されるモジュールの省略可能なパスと名前を指定します。 既定のパスは $HOME\Documents\WindowsPowerShell\Modulesです。 このパラメーターは必須です。

モジュールのサブディレクトリまたは作成 Export-PSSession ファイルのいずれかが既に存在する場合、コマンドは失敗します。 既存のファイルを上書きするには、Force パラメーターを使用します。

型:String
Aliases:PSPath, ModuleName
配置:1
規定値:$HOME\Documents\WindowsPowerShell\Modules
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Session

コマンドのエクスポート元の PSSession を指定します。 セッション オブジェクトを含む変数、またはセッション オブジェクトを取得するコマンド (Get-PSSession コマンドなど) を入力します。 このパラメーターは必須です。

型:PSSession
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

None

このコマンドレットにオブジェクトをパイプすることはできません。

出力

FileInfo

このコマンドレットは、作成したモジュールを構成するファイルの一覧を返します。

メモ

Export-PSSession は、PowerShell リモート処理インフラストラクチャに依存します。 このコマンドレットを使用するには、コンピューターをリモート処理用に構成する必要があります。 詳細については、about_Remote_Requirementsを参照してください。

Export-PSSession を使用して PowerShell プロバイダーをエクスポートすることはできません。

エクスポートされたコマンドは、エクスポート元の PSSession で暗黙的に実行されます。 コマンドのリモート実行の詳細は、PowerShell によって完全に処理されます。 ローカル コマンドを実行する場合と同様に、エクスポートされたコマンドを実行できます。

Export-ModuleMember は、PSSession に関する情報をキャプチャし、エクスポートするモジュールに保存します。 モジュールをインポートするときにコマンドのエクスポート元の PSSession が閉じられ、同じコンピューターにアクティブな PSSession がない場合、モジュール内のコマンドは PSSession の再作成を試みます。 PSSession の再作成が失敗した場合、エクスポートされたコマンドは実行されません。

モジュールでキャプチャおよび保存 Export-ModuleMember セッション情報には、$PSSessionOption 基本設定変数で指定したセッション オプションや、New-PSSession、または Enter-PSSession コマンドレットの Invoke-Command パラメーターを使用したセッション オプションは含まれません。 モジュールのインポート時に元の PSSession が閉じられた場合、モジュールは同じコンピューターに別の PSSession を使用します (使用可能な場合)。 インポートされたコマンドを正しく構成されたセッションで実行できるようにするには、モジュールをインポートする前に必要なオプションを使用して PSSession を作成します。

エクスポートするコマンドを見つけるには、Export-PSSessionInvoke-Command コマンドレットを使用して PSSession で Get-Command コマンドを実行します。 コマンドの書式設定データを取得して保存するには、Get-FormatDataExport-FormatData コマンドレットを使用します。 Invoke-Command コマンドを実行すると、Get-CommandGet-FormatDataExport-FormatData、および Export-PSSession からのエラー メッセージが表示されることがあります。 また、Export-PSSession は、Get-CommandGet-FormatDataSelect-Object、および Get-Help コマンドレットを含まないセッションからコマンドをエクスポートすることはできません。

Export-PSSession は、Write-Progress コマンドレットを使用してコマンドの進行状況を表示します。 コマンドの実行中に進行状況バーが表示されることがあります。

エクスポートされるコマンドには、メモ帳などのユーザー インターフェイスでプログラムを起動できないなど、他のリモート コマンドと同じ制限があります。

PowerShell プロファイルは PSSession では実行されないため、プロファイルがセッションに追加するコマンドは、Export-PSSessionで使用できません。 プロファイルからコマンドをエクスポートするには、コマンドをエクスポートする前に、Invoke-Command コマンドを使用して PSSession でプロファイルを手動で実行します。

Export-PSSession 作成するモジュールには、書式設定ファイルが含まれている場合があります。このコマンドで書式設定データがインポートされない場合でも、 このコマンドで書式設定データがインポートされない場合、作成された書式設定ファイルには書式設定データは含まれません。