about_Remote_Disconnected_Sessions
about_Remote_Disconnected_Sessions
원격 컴퓨터에서 오래 걸리는 명령을 돌려두고, 그 세션을 만들었던 콘솔은 닫아버리고 싶었던 적 있으신가요? PowerShell에서는 그게 가능해요. 만든 세션(PSSession)을 끊어 놓고(disconnect) 나중에 다시 연결(reconnect) 하면 되거든요. 이 문서에서는 PSSession을 어떻게 끊고 다시 연결하는지, 그리고 그 세션이 끊겨 있는 동안 명령은 어떻게 되는지를 차근차근 설명해 드릴게요.
본문
간단한 설명 (Short description)
PSSession을 끊고 다시 연결하는 방법을 설명하는 문서예요.
자세한 설명 (Long description)
PowerShell 3.0부터는 PSSession을 끊었다가, 같은 컴퓨터든 다른 컴퓨터든 어디에서든 그 세션에 다시 연결할 수 있어요. 세션의 상태는 유지되고, 세션이 끊겨 있는 동안에도 그 안에서 돌던 명령은 계속 실행돼요.
이 Disconnected Sessions(연결 끊긴 세션) 기능 덕분에, PSSession을 만든 콘솔을 닫고 컴퓨터를 꺼도 원격 PSSession에서 돌아가는 명령을 방해하지 않아요. 그래서 완료까지 오래 걸리는 명령을 실행할 때 특히 유용하죠.
한 가지 주의할 점이 있는데요. Enter-PSSession cmdlet으로 시작한 대화형(interactive) 세션은 끊을 수 없어요.
컴퓨터가 고장 나거나 네트워크가 끊겨서 세션이 의도치 않게 끊어진 경우에도, 끊긴 세션을 활용해서 그 PSSession을 다시 관리할 수 있어요.
연결 끊김 세션 관련 cmdlet (Disconnected session cmdlets)
다음 cmdlet들이 Disconnected Sessions 기능을 지원해요.
Connect-PSSession: 끊어진 PSSession에 연결해요.Disconnect-PSSession: PSSession을 끊어요.Get-PSSession: 로컬 컴퓨터나 원격 컴퓨터에 있는 PSSession을 가져와요.Receive-PSSession: 끊긴 세션에서 실행된 명령의 결과를 가져와요.Invoke-Command:InDisconnectedSession매개 변수는 PSSession을 만들고 즉시 끊어요.
연결 끊김 세션 기능은 어떻게 동작하나요? (How the disconnected sessions feature works)
PowerShell 3.0부터 PSSession은 PSSession이 만들어진 세션과 독립적이에요. 활성 상태인 PSSession은 연결의 원격 컴퓨터(서버 쪽)에 유지돼요. 그래서 클라이언트 쪽 컴퓨터가 꺼지거나 네트워크에서 끊겨도 문제가 없죠.
반면 PowerShell 2.0에서는, PSSession이 만들어진 세션(원래 세션)에서 끊기거나 그 세션이 끝나면 원격 컴퓨터에서 PSSession이 삭제됐어요.
PSSession을 끊으면, 세션은 원격 컴퓨터에 활성 상태로 남아요. 다만 상태가 Running에서 Disconnected로 바뀌죠. 끊어진 PSSession에는 다음 위치에서 다시 연결할 수 있어요.
- 같은 컴퓨터의 현재 세션
- 같은 컴퓨터의 다른 세션
- 다른 컴퓨터의 세션
물론 그 세션을 유지하고 있는 원격 컴퓨터가 실행 중이고 네트워크에 연결되어 있어야 해요.
끊긴 PSSession 안에서 돌던 명령은, 명령이 끝나거나 출력 버퍼가 가득 찰 때까지 원격 컴퓨터에서 중단 없이 계속 실행돼요. 출력 버퍼가 가득 차서 명령이 멈추지 않게 하려면 Disconnect-PSSession, New-PSSessionOption, New-PSTransportOption cmdlet의 OutputBufferingMode 매개 변수를 사용하면 돼요.
끊긴 세션은 원격 컴퓨터에서 연결 끊김 상태로 유지돼요. PSSession을 Remove-PSSession cmdlet으로 삭제하거나, PSSession의 유휴 제한 시간(idle timeout) 이 만료되기 전까지는 언제든 다시 연결할 수 있어요. 유휴 제한 시간은 Disconnect-PSSession, New-PSSessionOption, New-PSTransportOption cmdlet의 IdleTimeoutSec나 IdleTimeout 매개 변수로 조절할 수 있고요.
참고로 다른 사용자도 여러분이 만든 PSSession에 연결할 수 있어요. 다만 세션을 만들 때 썼던 자격 증명을 제공할 수 있거나, 세션 구성의 RunAs 자격 증명을 사용할 수 있을 때만 가능해요.
PSSession 가져오기 (How to get PSSessions)
PowerShell 3.0부터 Get-PSSession cmdlet은 로컬 컴퓨터와 원격 컴퓨터의 PSSession을 모두 가져와요. 현재 세션에서 만든 PSSession도 가져올 수 있고요.
로컬 컴퓨터나 원격 컴퓨터의 PSSession을 가져오려면 ComputerName이나 ConnectionUri 매개 변수를 사용해요. 매개 변수 없이 쓰면 Get-PSSession은 세션이 어디에서 끝났든 상관없이 로컬 세션에서 만든 PSSession을 가져와요.
다음 예시는 Get-PSSession을 사용하는 모습이에요.
먼저 New-PSSession이 Server01 컴퓨터에 세션을 만들어요. 세션은 Server01 컴퓨터에 위치하죠.
New-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Server01에서 세션을 가져오려면 ComputerName 매개 변수로 대상을 지정해요.
Get-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
여기서 ComputerName 매개 변수의 값이 localhost라면 상황이 달라져요. Get-PSSession은 로컬 컴퓨터에서 끝나고 유지되는 PSSession만 가져와요. 로컬 컴퓨터에서 시작했더라도 Server01 컴퓨터에 있는 PSSession은 가져오지 않아요.
Get-PSSession -ComputerName localhost
현재 세션에서 만든 세션을 가져오려면 Get-PSSession을 매개 변수 없이 쓰면 돼요. 아래 예시에서는 현재 세션에서 만들어 Server01 컴퓨터에 연결된 PSSession을 가져와요.
Get-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
세션 끊기 (How to disconnect sessions)
세션을 끊을 때는 Disconnect-PSSession cmdlet을 사용해요. PSSession을 지정하려면 Session 매개 변수를 쓰거나, New-PSSession이나 Get-PSSession cmdlet에서 나온 PSSession 객체를 Disconnect-PSSession으로 파이프하면 돼요.
다음 명령은 Server01 컴퓨터에 대한 PSSession을 끊어요. State 속성 값이 Disconnected가 되고 Availability가 None이 된 걸 볼 수 있어요.
Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Disconnected Microsoft.PowerShell None
연결 끊김 세션을 만들 때는 Invoke-Command cmdlet의 InDisconnectedSession 매개 변수를 사용해요. 이 매개 변수는 세션을 만들고 명령을 시작한 뒤, 명령이 어떤 출력도 돌려주기 전에 즉시 세션을 끊어요.
다음 명령은 원격 컴퓨터 Server02의 연결 끊김 세션에서 Get-WinEvent 명령을 실행해요.
Invoke-Command -ComputerName Server02 -InDisconnectedSession -ScriptBlock {
Get-WinEvent -LogName "*PowerShell*" }
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 Session3 Server02 Disconnected Microsoft.PowerShell None
끊긴 세션에 연결하기 (How to connect to disconnected sessions)
끊긴 세션에 연결할 때는 Connect-PSSession cmdlet을 ComputerName이나 ConnectionUri 매개 변수와 함께 사용해요. 아니면 Get-PSSession의 출력을 Connect-PSSession으로 파이프해도 되고요.
다음 예시는 Server02 컴퓨터의 세션을 가져와요. 출력에 끊긴 세션이 두 개 보이죠.
Get-PSSession -ComputerName Server02
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Disconnected Microsoft.PowerShell None
4 Session3 juneb-srv8320 Disconnected Microsoft.PowerShell None
다음 명령은 Session2에 연결해요. 이제 PSSession이 열려 있고(Opened) 사용 가능한(Available) 상태가 됐어요.
Connect-PSSession -ComputerName Server02 -Name Session2
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Opened Microsoft.PowerShell Available
결과 가져오기 (How to get the results)
끊긴 PSSession에서 실행된 명령의 결과를 가져올 때는 Receive-PSSession cmdlet을 사용해요.
Connect-PSSession 대신 Receive-PSSession을 쓸 수도 있어요. 세션이 이미 다시 연결되어 있다면 Receive-PSSession은 세션이 끊겨 있는 동안 실행된 명령의 결과를 가져와요. 세션이 여전히 연결 끊김 상태라면 Receive-PSSession이 그 세션에 연결한 다음, 끊겨 있는 동안 실행된 명령의 결과를 가져와요.
Receive-PSSession은 결과를 작업(job) 으로(비동기적으로) 돌려줄 수도 있고, 호스트 프로그램으로(동기적으로) 돌려줄 수도 있어요. 어느 쪽으로 받을지 고르는 게 OutTarget 매개 변수예요. Job이나 Host 중에 고르면 되고, 기본값은 Host예요. 다만 받으려는 명령이 현재 세션에서 작업(job) 으로 시작된 거라면, OutTarget 값과 상관없이 작업으로 반환돼요.
다음 예시는 Receive-PSSession cmdlet으로 Server02의 세션에 다시 연결하고 Get-WinEvent 명령의 결과를 가져와요. 결과는 OutTarget 매개 변수를 써서 작업으로 받고 있어요.
Receive-PSSession -ComputerName Server02 -Name Session3 -OutTarget Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemoteJob Running True Server02
작업의 결과를 가져오려면 Receive-Job cmdlet을 사용해요.
Get-Job | Receive-Job -Keep
ProviderName: PowerShell
TimeCreated Id LevelDisplayName Message PSComputerName
----------- -- ---------------- ------- --------------
5/14/2012 7:26:04 PM 400 Information Engine stat Server02
5/14/2012 7:26:03 PM 600 Information Provider stat Server02
상태와 가용성 속성 (State and availability properties)
연결 끊김 PSSession의 State와 Availability 속성은, 그 세션에 다시 연결할 수 있는지 알려줘요.
PSSession이 현재 세션에 연결되어 있으면 상태는 Opened이고 가용성은 Available이에요. PSSession에서 끊으면 상태는 Disconnected, 가용성은 None이 되죠. 그리고 State 속성의 값은 현재 세션 기준이에요. 값이 Disconnected라는 건 그 PSSession이 현재 세션에는 연결되어 있지 않다는 뜻이에요. 그렇다고 모든 세션에서 끊어졌다는 뜻은 아니에요. 다른 세션에는 연결되어 있을 수도 있거든요.
PSSession에 연결하거나 다시 연결할 수 있는지는 Availability 속성으로 판단해요. 값이 None이면 세션에 연결할 수 있다는 뜻이고, Busy면 다른 세션에 연결되어 있어서 이 세션에는 연결할 수 없다는 뜻이에요.
다음 예시는 같은 컴퓨터에서 두 개의 PowerShell 세션을 실행하는 상황이에요. PSSession이 끊기고 다시 연결되면서 각 세션에서 State와 Availability 속성 값이 어떻게 변하는지 보면 이해가 잘 돼요.
# Session 1
New-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Opened Microsoft.PowerShell Available
# Session 2
Get-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
# Session 1
Get-PSSession -ComputerName Server30 -Name Test | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Connect-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
3 Test Server30 Opened Microsoft.PowerShell Available
# Session 1
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
연결 끊긴 세션은 Remove-PSSession cmdlet으로 삭제하거나 유휴 제한 시간이 지나기 전까지 원격 컴퓨터에 유지돼요. PSSession의 IdleTimeout 속성이, 끊긴 세션이 삭제되기 전까지 얼마나 유지될지를 정해요.
유휴 제한 시간 값 (Idle timeout values)
PSSession은 하트비트(heartbeat) 스레드가 응답을 받지 못하면 유휴 상태가 돼요. 세션을 끊으면 그 세션은 유휴 상태가 되면서 IdleTimeout 시계가 시작돼요. 설령 끊긴 세션 안에서 아직 명령이 실행 중이더라도 그렇죠. PowerShell은 연결 끊긴 세션을 활성 상태지만 유휴 상태로 간주해요.
세션을 만들고 끊을 때는, PSSession의 유휴 제한 시간이 여러분이 쓸 만큼 충분히 길면서도, 원격 컴퓨터에서 불필요한 리소스를 소모하지 않을 만큼 짧은지 꼭 확인해 보세요.
세션 구성의 IdleTimeoutMs 속성이 그 세션 구성을 쓰는 세션의 기본 유휴 제한 시간을 정해요. 이 기본값은 덮어쓸 수 있는데, 세션 구성의 MaxIdleTimeoutMs 속성 값을 초과할 수는 없어요.
세션 구성의 IdleTimeoutMs와 MaxIdleTimeoutMs 값을 보려면 다음 명령을 사용하면 돼요.
Get-PSSessionConfiguration |
Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs
원격 컴퓨터에서 Administrators 그룹의 멤버라면, 세션 구성을 만들 때 이 값들을 설정할 수 있어요. 그리고 세션을 끊을 때도 값을 바꿀 수 있고요.
여기서 단위를 주의해야 해요. 세션 구성과 세션 옵션의 유휴 제한 시간은 밀리초(ms) 이고, 세션과 세션 구성 옵션의 유휴 제한 시간은 초(sec) 예요.
PSSession의 유휴 제한 시간은 PSSession을 만들 때(New-PSSession, Invoke-Command)와 끊을 때(Disconnect-PSSession) 설정할 수 있어요. 다만 PSSession에 연결할 때(Connect-PSSession)나 결과를 가져올 때(Receive-PSSession)는 IdleTimeout 값을 바꿀 수 없어요.
Connect-PSSession과 Receive-PSSession cmdlet에는 SessionOption 매개 변수가 있어요. 이 매개 변수는 New-PSSessionOption cmdlet이 돌려주는 것 같은 PSSessionOption 객체를 받아요.
참고로 SessionOption 객체의 IdleTimeout 값이나 $PSSessionOption 기본 설정 변수의 IdleTimeout 값은, Connect-PSSession이나 Receive-PSSession 명령의 IdleTimeout 값을 바꾸지 않아요.
특정 유휴 제한 시간 값을 가진 PSSession을 만들려면 $PSSessionOption 기본 설정 변수를 만들어서, 그 IdleTimeout 속성 값을 원하는 값(밀리초 단위)으로 설정하면 돼요.
PSSession을 만들 때 $PSSessionOption 변수의 값은 세션 구성의 값보다 우선해요.
예를 들어 다음 명령은 유휴 제한 시간을 48시간으로 설정해요.
$PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000
특정 유휴 제한 시간 값을 가진 PSSession을 만들 때는 New-PSSessionOption cmdlet의 IdleTimeoutMSec 매개 변수를 사용해서 세션 옵션을 만들고, 그 세션 옵션을 New-PSSession이나 Invoke-Command의 SessionOption 매개 변수 값으로 쓰면 돼요.
세션을 만들 때 설정한 값은 $PSSessionOption 기본 설정 변수와 세션 구성에 설정된 값보다 우선해요.
예를 들면 이런 식이에요.
$o = New-PSSessionOption -IdleTimeoutMSec 172800000
New-PSSession -SessionOption $o
PSSession을 끊을 때 유휴 제한 시간을 바꾸려면 Disconnect-PSSession cmdlet의 IdleTimeoutSec 매개 변수를 사용해요.
예를 들면:
Disconnect-PSSession -IdleTimeoutSec 172800
특정 유휴 제한 시간과 최대 유휴 제한 시간을 가진 세션 구성을 만들려면 New-PSTransportOption cmdlet의 IdleTimeoutSec와 MaxIdleTimeoutSec 매개 변수를 사용해요. 그리고 그 전송 옵션을 Register-PSSessionConfiguration의 TransportOption 매개 변수 값으로 쓰면 돼요.
예를 들면:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Register-PSSessionConfiguration -Name Test -TransportOption $o
세션 구성의 기본 유휴 제한 시간과 최대 유휴 제한 시간을 바꾸려면 New-PSTransportOption cmdlet의 IdleTimeoutSec와 MaxIdleTimeoutSec 매개 변수로 전송 옵션을 만든 뒤, 그 전송 옵션을 Set-PSSessionConfiguration의 TransportOption 매개 변수 값으로 쓰면 돼요.
예를 들면:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Set-PSSessionConfiguration -Name Test -TransportOption $o
출력 버퍼링 모드 (Output buffering mode)
PSSession의 출력 버퍼링 모드(output buffering mode)는, PSSession의 출력 버퍼가 가득 찼을 때 명령 출력을 어떻게 다룰지를 정해요.
연결 끊긴 세션에서는 이 출력 버퍼링 모드가, 세션이 끊겨 있는 동안 명령이 계속 실행될지를 사실상 결정해요.
유효한 값은 다음과 같아요.
Block(기본값) – 출력 버퍼가 가득 차면, 버퍼가 비워질 때까지 실행이 중단돼요.Block은 데이터를 보존하지만, 명령이 중단될 수는 있어요.Drop– 출력 버퍼가 가득 차도 실행은 계속돼요. 새 출력이 생기면 가장 오래된 출력이 버려지죠.Drop값을 쓸 때는 출력을 파일로 리디렉션하는 게 좋아요. 이 값이 연결 끊긴 세션에 권장돼요.
세션 구성의 OutputBufferingMode 속성은 그 세션 구성을 쓰는 세션의 기본 버퍼링 모드를 정해요.
세션 구성의 OutputBufferingMode 값을 확인하려면 다음 명령 형식 중 하나를 쓰면 돼요.
(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode
Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode
세션 구성의 기본값은 덮어쓸 수 있어요. PSSession을 만들 때, 끊을 때, 다시 연결할 때 각각 출력 버퍼링 모드를 설정할 수 있죠.
원격 컴퓨터에서 Administrators 그룹의 멤버라면 세션 구성의 출력 버퍼링 모드를 만들고 바꿀 수 있어요.
출력 버퍼링 모드가 Drop인 PSSession을 만들려면 $PSSessionOption 기본 설정 변수를 만들어서, 그 OutputBufferingMode 속성 값을 Drop으로 설정하면 돼요.
PSSession을 만들 때 $PSSessionOption 변수의 값은 세션 구성의 값보다 우선해요.
예를 들면:
$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop
New-PSSessionOption cmdlet의 OutputBufferingMode 매개 변수를 사용해 값이 Drop인 세션 옵션을 만들 수도 있어요. 그런 다음 그 PSSessionOption 객체를 New-PSSession이나 Invoke-Command의 SessionOption 매개 변수 값으로 쓰면 되죠.
세션을 만들 때 설정한 값은 $PSSessionOption 기본 설정 변수와 세션 구성에 설정된 값보다 우선해요.
예를 들면:
$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o
PSSession을 끊을 때 출력 버퍼링 모드를 바꾸려면 Disconnect-PSSession cmdlet의 OutputBufferingMode 매개 변수를 사용해요.
예를 들면:
Disconnect-PSSession -OutputBufferingMode Drop
PSSession을 다시 연결할 때 출력 버퍼링 모드를 바꾸려면 New-PSSessionOption cmdlet의 OutputBufferingMode 매개 변수를 사용해요. 그런 다음 그 세션 옵션을 Connect-PSSession이나 Receive-PSSession의 SessionOption 매개 변수 값으로 쓰면 돼요.
예를 들면:
$o = New-PSSessionOption -OutputBufferingMode Drop
Connect-PSSession -ComputerName Server01 -Name Test -SessionOption $o
기본 출력 버퍼링 모드가 Drop인 세션 구성을 만들려면 New-PSTransportOption cmdlet의 OutputBufferingMode 매개 변수로 값이 Drop인 전송 옵션 객체를 만들어, 그 전송 옵션을 Register-PSSessionConfiguration의 TransportOption 매개 변수 값으로 쓰면 돼요.
예를 들면:
$o = New-PSTransportOption -OutputBufferingMode Drop
Register-PSSessionConfiguration -Name Test -TransportOption $o
세션 구성의 기본 출력 버퍼링 모드를 바꾸려면 New-PSTransportOption cmdlet의 OutputBufferingMode 매개 변수로 값이 Drop인 전송 옵션을 만들어, 그 전송 옵션을 Set-PSSessionConfiguration의 TransportOption 매개 변수 값으로 쓰면 돼요.
예를 들면:
$o = New-PSTransportOption -OutputBufferingMode Drop
Set-PSSessionConfiguration -Name Test -TransportOption $o
루프백 세션 끊기 (Disconnecting loopback sessions)
루프백 세션(loopback session), 즉 로컬 세션은 시작과 종료가 같은 컴퓨터에서 일어나는 PSSession이에요. 다른 PSSession처럼 활성 루프백 세션은 연결의 원격 쪽 컴퓨터에 유지돼요.
기본적으로 루프백 세션은 네트워크 보안 토큰으로 만들어져요. 이 토큰으로는 세션 안에서 실행되는 명령이 다른 컴퓨터에 접근할 수 없어요. 네트워크 보안 토큰을 가진 루프백 세션은 로컬 컴퓨터의 어떤 세션에서든, 또는 원격 컴퓨터의 세션에서라도 다시 연결할 수 있어요.
다만 New-PSSession, Enter-PSSession, Invoke-Command cmdlet의 EnableNetworkAccess 매개 변수를 쓰면, 루프백 세션이 대화형 보안 토큰으로 만들어져요. 이 대화형 토큰 덕분에 루프백 세션 안에서 실행되는 명령이 다른 컴퓨터에서 데이터를 가져올 수 있게 되죠.
대화형 토큰을 가진 루프백 세션은 끊었다가, 같은 컴퓨터의 같은 세션 또는 다른 세션에서 다시 연결할 수 있어요. 그런데 악의적인 접근을 막기 위해, 대화형 토큰을 가진 루프백 세션은 만들어진 그 컴퓨터에서만 다시 연결할 수 있어요.
연결 끊긴 세션에서 작업 기다리기 (Waiting for jobs in disconnected sessions)
Wait-Job cmdlet은 작업이 완료될 때까지 기다렸다가 명령 프롬프트나 다음 명령으로 돌아가요. 기본적으로 작업이 실행 중인 세션이 끊겨 있으면 Wait-Job은 바로 돌아와요. Wait-Job cmdlet이 세션이 다시 연결되어 Opened 상태가 될 때까지 기다리게 하려면 Force 매개 변수를 사용하면 돼요. 자세한 내용은 Wait-Job 문서를 참고하세요.
견고한 세션과 의도치 않은 연결 끊김 (Robust sessions and unintentional disconnection)
컴퓨터 장애나 네트워크 중단 때문에 PSSession이 의도치 않게 끊어질 수도 있어요. PowerShell은 그 PSSession을 복구하려고 시도하는데, 성공 여부는 원인의 심각도와 지속 시간에 따라 달라져요.
의도치 않게 끊긴 PSSession의 상태는 Broken이나 Closed일 수도 있고, Disconnected일 수도 있어요. State 값이 Disconnected라면, 의도적으로 끊은 세션을 다루는 것과 같은 방법으로 그 PSSession을 관리할 수 있어요. 예를 들어 Connect-PSSession cmdlet으로 세션에 다시 연결하고, Receive-PSSession cmdlet으로 세션이 끊겨 있는 동안 실행된 명령의 결과를 가져오면 되죠.
PSSession 안에서 명령이 실행 중인데, 그 PSSession을 만든 세션을 닫아도(끝내도) PowerShell은 그 PSSession을 원격 컴퓨터에서 Disconnected 상태로 유지해요. 반대로 PSSession 안에서 실행 중인 명령이 없는데 만든 세션을 닫으면, PowerShell은 그 PSSession을 유지하려 하지 않아요.