次の方法で共有


Disconnect-PSSession

セッションから切断します。

構文

Disconnect-PSSession
          [-Session] <PSSession[]>
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -Name <String[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -InstanceId <Guid[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-Id] <Int32[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]

説明

このコマンドレットは、Windows プラットフォームでのみ使用できます。

Disconnect-PSSession コマンドレットは、現在のセッションから、New-PSSession コマンドレットを使用して開始された PowerShell セッション (PSSession) を切断します。 その結果、PSSession は切断状態になります。 現在のセッションから、またはローカル コンピューターまたは別のコンピューター上の別のセッションから、切断された PSSession に接続できます。

Disconnect-PSSession コマンドレットは、現在のセッション 接続されている PSSessions のみを開いて切断します。 は、PSSessions破損または閉じたり、 コマンドレットを使用して起動 対話型 PSSessions を切断したり、他のセッションに接続されている PSSessions 切断したりすることはできません。

切断された PSSessionに再接続するには、Connect-PSSession または Receive-PSSession コマンドレットを使用します。

PSSession が切断されると、PSSession のコマンドは、PSSession タイムアウトするか、PSSession 内のコマンドが完全な出力バッファーによってブロックされない限り、完了するまで実行を続けます。 アイドル タイムアウトを変更するには、IdleTimeoutSec パラメーターを使用します。 出力バッファリング モードを変更するには、OutputBufferingMode パラメーターを使用します。また、Invoke-Command コマンドレットの InDisconnectedSession パラメーターを使用して、切断されたセッションでコマンドを実行することもできます。

切断されたセッション機能の詳細については、「about_Remote_Disconnected_Sessions」を参照してください。

このコマンドレットは、Windows PowerShell 3.0 で導入されています。

例 1 - 名前でセッションを切断する

このコマンドは、Server01 コンピューター上の UpdateSessionPSSession を現在のセッションから切断します。 このコマンドは、Name パラメーターを使用して、PSSessionを識別します。

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          None

出力は、切断の試行が成功したことを示しています。 セッションの状態が Disconnected され、可用性None。これは、セッションがビジーでなく、再接続できることを示します。

例 2 - 特定のコンピューターからセッションを切断する

このコマンドは、Server12 コンピューター上の ITTaskPSSession を現在のセッションから切断します。 ITTask セッションは現在のセッションで作成され、Server12 コンピューターに接続されます。 このコマンドでは、Get-PSSession コマンドレットを使用してセッションを取得し、Disconnect-PSSession コマンドレットを使用してセッションを切断します。

PS> Get-PSSession -ComputerName Server12 -Name ITTask |
  Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  ITTask          Server12        Disconnected  ITTasks               None

Disconnect-PSSession コマンドは、OutputBufferingMode パラメーターを使用して、出力モードを Dropに設定します。 この設定により、セッション出力バッファーがいっぱいであっても、セッションで実行されているスクリプトを引き続き実行できます。 スクリプトはファイル共有のレポートにその出力を書き込むため、結果なしで他の出力が失われる可能性があります。

また、このコマンドでは、IdleTimeoutSec パラメーターを使用して、セッションのアイドル タイムアウトを 24 時間に拡張します。 この設定により、この管理者または他の管理者がセッションに再接続してスクリプトが実行されたことを確認し、必要に応じてトラブルシューティングを行います。

例 3 - 複数のコンピューターで複数の PSSession を使用する

この一連のコマンドは、エンタープライズ シナリオで Disconnect-PSSession コマンドレットがどのように使用されるかを示しています。 この場合、新しい技術者がリモート コンピューター上のセッションでスクリプトを開始し、問題が発生します。 経験豊富なマネージャーがセッションに接続して問題を解決できるように、技術者はセッションから切断します。

PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1 ITTask           Srv1            Disconnected  Microsoft.PowerShell          None

PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None
 2 ITTask          Srv2            Opened        Microsoft.PowerShell     Available
 3 ITTask          Srv30           Opened        Microsoft.PowerShell     Available

PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None

PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $HOME\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $HOME\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s

技術者はまず、複数のリモート コンピューターでセッションを作成し、各セッションでスクリプトを実行します。 最初のコマンドでは、New-PSSession コマンドレットを使用して、3 台のリモート コンピューターで ITTask セッションを作成します。 このコマンドは、セッションを $s 変数に保存します。 2 番目のコマンドでは、Invoke-Command コマンドレットの FilePath パラメーターを使用して、$s 変数内のセッションでスクリプトを実行します。

Srv1 コンピューターで実行されているスクリプトによって、予期しないエラーが発生します。 技術者は上司に連絡し、サポートを求めます。 マネージャーは、調査できるように、技術者にセッションからの切断を指示します。2 番目のコマンドでは、Get-PSSession コマンドレットを使用して Srv1 コンピューター上の ITTask セッションを取得し、Disconnect-PSSession コマンドレットを使用して切断します。 このコマンドは、他のコンピューター上の ITTask セッションには影響しません。

3 番目のコマンドでは、Get-PSSession コマンドレットを使用して、ITTask セッションを取得します。 出力は、Srv2 および Srv30 コンピューター上の ITTask セッションが、切断するコマンドの影響を受けなかったことを示しています。

マネージャーは、自宅のコンピューターにログオンし、会社のネットワークに接続し、PowerShell を起動し、Get-PSSession コマンドレットを使用して Srv1 コンピューターで ITTask セッションを取得します。 技術者の資格情報を使用してセッションにアクセスします。

次に、マネージャーは Connect-PSSession コマンドレットを使用して、Srv1 コンピューター上の ITTask セッションに接続します。 このコマンドは、セッションを $s 変数に保存します。

マネージャーは、Invoke-Command コマンドレットを使用して、$s 変数のセッションでいくつかの診断コマンドを実行します。 必要なディレクトリが見つからなかったため、スクリプトが失敗したことを認識しています。 マネージャーは、MkDir 関数を使用してディレクトリを作成し、Get-PatchStatus.ps1 スクリプトを再起動してセッションから切断します。マネージャーは、その結果を技術者に報告し、セッションに再接続してタスクを完了するよう提案し、必要なディレクトリが存在しない場合は作成するコマンドを Get-PatchStatus.ps1 スクリプトに追加するよう依頼します。

例 4 - PSSession のタイムアウト値を変更する

この例では、セッションの IdleTimeout プロパティの値を修正して、切断できるようにする方法を示します。

セッションのアイドル タイムアウト プロパティは、切断されたセッションが削除されるまでの保持期間を決定するため、切断されたセッションにとって重要です。 アイドル タイムアウト オプションは、セッションの作成時と切断時に設定できます。 セッションのアイドル タイムアウトの既定値は、ローカル コンピューターの $PSSessionOption 基本設定変数とリモート コンピューターのセッション構成で設定されます。 セッションに設定された値はセッション構成で設定された値よりも優先されますが、セッション値は、MaxIdleTimeoutMs 値など、セッション構成で設定されたクォータを超えることはできません。

PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds).  Choose an idle time out
value that is within the allowed range and try again.

PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
 Format-List -Property *

Architecture                  : 64
Filename                      : %windir%\system32\pwrshplugin.dll
ResourceUri                   : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers            : 5
lang                          : en-US
SupportsOptions               : true
ExactMatch                    : true
RunAsUser                     :
IdleTimeoutms                 : 7200000
PSVersion                     : 3.0
OutputBufferingMode           : Block
AutoRestart                   : false
SecurityDescriptorSddl        : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB           : 1024
MaxIdleTimeoutms              : 2147483647
Uri                           : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : http://schemas.microsoft.com/powershell/microsoft.powershell
Enabled                       : true
MaxShells                     : 25
MaxShellsPerUser              : 25
Permission                    : BUILTIN\Administrators AccessAllowed
PSComputerName                : localhost
RunspaceId                    : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName            : True


PS> $s.Runspace.ConnectionInfo
ConnectionUri                     : http://Server01/wsman
ComputerName                      : Server01
Scheme                            : http
Port                              : 80
AppName                           : /wsman
Credential                        :
ShellUri                          : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism           : Default
CertificateThumbprint             :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         : 209715200
UseCompression                    : True
NoMachineProfile                  : False
ProxyAccessType                   : None
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
NoEncryption                      : False
UseUTF16                          : False
OutputBufferingMode               : Drop
IncludePortInSPN                  : False
Culture                           : en-US
UICulture                         : en-US
OpenTimeout                       : 180000
CancelTimeout                     : 60000
OperationTimeout                  : 180000
IdleTimeout                       : 172800000

PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 4 ITTask          Server01        Disconnected  Microsoft.PowerShell          None

PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000

最初のコマンドでは、New-PSSessionOption コマンドレットを使用してセッション オプション オブジェクトを作成します。 IdleTimeout パラメーターを使用して、アイドル タイムアウトを 48 時間 (172800000 ミリ秒) に設定します。 このコマンドは、セッション オプション オブジェクトを $Timeout 変数に保存します。

2 番目のコマンドでは、New-PSSession コマンドレットを使用して、Server01 コンピューターに ITTask セッションを作成します。 このコマンドは、セッションを $s 変数に保存します。 SessionOption パラメーターの値は、$Timeout 変数の 48 時間のアイドル タイムアウトです。

3 番目のコマンドは、$s 変数の ITTask セッションを切断します。 セッションのアイドル タイムアウト値がセッション構成のクォータ maxIdleTimeoutMs を超えたため、コマンドは失敗します。 アイドル タイムアウトはセッションが切断されるまで使用されないため、セッションの使用中にこの違反が検出されない可能性があります。

4 番目のコマンドでは、Invoke-Command コマンドレットを使用して、Server01 コンピューター上の Microsoft.PowerShell セッション構成に対して Get-PSSessionConfiguration コマンドを実行します。 このコマンドでは、Format-List コマンドレットを使用して、セッション構成のすべてのプロパティを一覧に表示します。出力は、MaxIdleTimeoutMS プロパティを示しています。このプロパティは、セッション構成を使用するセッションで許可される最大 IdleTimeout 値を 43200000 ミリ秒 (12 時間) に設定します。

5 番目のコマンドは、$s 変数内のセッションのセッション オプション値を取得します。 多くのセッション オプションの値は、セッションの Runspace プロパティの ConnectionInfo プロパティのプロパティです。出力は、セッションの IdleTimeout プロパティの値が 172800000 ミリ秒 (48 時間) であり、セッション構成で 12 時間のクォータ MaxIdleTimeoutMs 違反していることを示しています。この競合を解決するには、ConfigurationName パラメーターを使用して別のセッション構成を選択するか、IdleTimeout パラメーターを使用してセッションのアイドル タイムアウトを減らすことができます。

6 番目のコマンドはセッションを切断します。 IdleTimeoutSec パラメーターを使用して、アイドル タイムアウトを 12 時間の最大値に設定します。

7 番目のコマンドは、切断されたセッションの IdleTimeout プロパティの値を取得します。これはミリ秒単位で測定されます。 出力は、コマンドが成功したことを確認します。

パラメーター

-Confirm

コマンドレットを実行する前に確認を求めるメッセージが表示されます。

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

-Id

指定されたセッション ID を持つセッションから切断します。 1 つ以上の ID (コンマで区切って) を入力するか、範囲演算子 (..) を使用して ID の範囲を指定します。

セッションの ID を取得するには、Get-PSSession コマンドレットを使用します。 インスタンス ID は、セッションの ID プロパティに格納されます。

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

-IdleTimeoutSec

切断 PSSessionのアイドル タイムアウト値を変更します。 値を秒単位で入力します。 最小値は 60 (1 分) です。

アイドル タイムアウトは、切断された PSSession リモート コンピューター上で維持される期間を決定します。 タイムアウトが切れると、PSSession が削除されます。

切断 PSSessions は、切断されたセッションでコマンドが実行されている場合でも、切断された時点からアイドル状態と見なされます。

セッションのアイドル タイムアウトの既定値は、セッション構成の IdleTimeoutMs プロパティの値によって設定されます。 既定値は 7200000 ミリ秒 (2 時間) です。

このパラメーターの値は、$PSSessionOption 基本設定変数の IdleTimeout プロパティの値と、セッション構成の既定のアイドル タイムアウト値よりも優先されます。 ただし、この値は、セッション構成の MaxIdleTimeoutMs プロパティの値を超えることはできません。 MaxIdleTimeoutMs の既定値は 12 時間 (43200000 ミリ秒) です。

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

-InstanceId

指定したインスタンス ID を持つセッションから切断します。

インスタンス ID は、ローカル コンピューターまたはリモート コンピューター上のセッションを一意に識別する GUID です。 インスタンス ID は、複数のコンピューター上の複数のセッション間でも一意です。

セッションのインスタンス ID を取得するには、Get-PSSession コマンドレットを使用します。 インスタンス ID は、セッションの InstanceID プロパティに格納されます。

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

-Name

指定されたフレンドリ名を持つセッションから切断します。 ワイルドカードを使用できます。

セッションのフレンドリ名を取得するには、Get-PSSession コマンドレットを使用します。 フレンドリ名は、セッションの Name プロパティに格納されます。

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

-OutputBufferingMode

出力バッファーがいっぱいになったときに、切断されたセッションでコマンド出力を管理する方法を決定します。 既定値は Blockです。

切断されたセッションのコマンドが出力を返し、出力バッファーがいっぱいになった場合、このパラメーターの値は、セッションが切断されている間もコマンドの実行を継続するかどうかを実質的に決定します。 Block 値を指定すると、セッションが再接続されるまでコマンドが中断されます。 Drop 値を指定すると、データが失われる可能性がありますが、コマンドを完了できます。 Drop 値を使用する場合は、コマンド出力をディスク上のファイルにリダイレクトします。

有効な値は次のとおりです。

  • Block: 出力バッファーがいっぱいになると、バッファーがクリアされるまで実行が中断されます。
  • Drop: 出力バッファーがいっぱいになると、実行が続行されます。 新しい出力が保存されると、最も古い出力が破棄されます。
  • None: 出力バッファリング モードは指定されません。 セッション構成の OutputBufferingMode プロパティの値は、切断されたセッションに使用されます。
型:OutputBufferingMode
配置:Named
規定値:Block
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Session

指定した PSSessionsから切断します。 New-PSSession コマンドレット 返すオブジェクトなど、PSSession オブジェクトを入力します。 PSSession オブジェクトをパイプ処理して、Disconnect-PSSessionすることもできます。

コマンドレットは、切断されている PSSessions や、他のコンピューター上の他のセッションに接続されている PSSessions など、リモート コンピューターで終了するすべての PSSessions を取得できます。 Disconnect-PSSession は、現在のセッション 接続されている PSSession のみを切断します。 他の PSSessions をパイプして Disconnect-PSSessionすると、Disconnect-PSSession コマンドは失敗します。

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

-ThrottleLimit

Disconnect-PSSession コマンドのスロットル制限を設定します。

スロットル制限は、このコマンドを実行するために確立できる同時接続の最大数です。 このパラメーターを省略するか、0の値を入力すると、既定値の 32が使用されます。

スロットル制限は、セッションまたはコンピューターではなく、現在のコマンドにのみ適用されます。

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

-WhatIf

コマンドレットを実行した場合の動作を示します。 コマンドレットは実行されません。

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

入力

PSSession

このコマンドレットにセッションをパイプできます。

出力

PSSession

このコマンドレットは、切断されたセッションを表すオブジェクトを返します。

メモ

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

  • ウィンドウズ:
    • dnsn

このコマンドレットは、Windows プラットフォームでのみ使用できます。

  • Disconnect-PSSession コマンドレットは、ローカル コンピューターとリモート コンピューターが PowerShell 3.0 以降を実行している場合にのみ機能します。

  • 切断されたセッションで Disconnect-PSSession コマンドレットを使用する場合、コマンドはセッションに影響を与えません。エラーは生成されません。

  • 対話型セキュリティ トークンを使用して切断されたループバック セッション (EnableNetworkAccess パラメーターで作成されたもの) は、セッションが作成されたコンピューターからのみ再接続できます。 この制限により、コンピューターが悪意のあるアクセスから保護されます。

  • PSSessionを切断すると、セッション状態は Disconnected され、可用性は [なし]

    State プロパティの値は、現在のセッションに対して相対的です。 したがって、Disconnected の値は、PSSession が現在のセッションに接続されていないことを意味します。 ただし、PSSession がすべてのセッションから切断されているわけではありません。 別のセッションに接続されている可能性があります。 セッションに接続できるか再接続できるかを確認するには、Availability プロパティを使用します。

    None可用性 値は、セッションに接続できることを示します。 Busy の値は、別のセッションに接続されているため、PSSession に接続できないことを示します。

    セッションの State プロパティの値の詳細については、「RunspaceState 列挙」を参照してください。

    セッションの Availability プロパティの値の詳細については、「RunspaceAvailability 列挙を参照してください。