次の方法で共有


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>]

説明

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

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

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

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

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

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

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

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

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

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

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

このコマンドは、Server12 コンピューター上の ITTask PSSession を現在のセッションから切断します。 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-PSSessionOutputBufferingMode パラメーターを 使用して、出力モードを 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 番目のコマンドでは、 コマンドレットの FilePath パラメーターを Invoke-Command 使用して、$s変数内のセッションでスクリプトを実行します。

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

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

マネージャーは、ホーム コンピューターにログオンし、会社のネットワークに接続し、Windows 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                   : https://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : https://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                           : https://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : https://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                          : https://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 時間 (172,800,000 ミリ秒) に設定します。 セッション オプション オブジェクトは $Timeout 変数に保存されます。

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

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

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

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

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

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

パラメーター

-Confirm

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

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

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

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

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-IdleTimeoutSec

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

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

PSSession が切断されると、その時点からアイドル状態であると判断されます。これは、そのセッションでコマンドを実行している場合であっても同じです。

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

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

Type:Int32
Position:Named
Default value:60
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

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

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

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

Type:Guid[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Name

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

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

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-OutputBufferingMode

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

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

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

  • ブロック: 出力バッファーがいっぱいになると、バッファーがクリアされるまで実行が中断されます。
  • ドロップ: 出力バッファーがいっぱいになると、実行が続行されます。 新しい出力が保存されると、最も古い出力が破棄されます。
  • なし: 出力バッファリング モードは指定されません。 セッション構成の OutputBufferingMode プロパティの値は、切断されたセッションに使用されます。
Type:OutputBufferingMode
Position:Named
Default value:Block
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

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

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

Type:PSSession[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ThrottleLimit

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

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

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

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

PSSession

セッションを に Disconnect-PSSessionパイプできます。

出力

PSSession

Disconnect-PSSession は、切断されたセッションを表す オブジェクトを返します。

メモ

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

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

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

  • PSSession を切断した場合には、セッションの状態が Disconnected、可用性が None に、それぞれ変更されます。

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

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

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

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