about_Remote_Disconnected_Sessions
Breve descrição
Explica como desconectar e reconectar a uma sessão do PowerShell (PSSession).
Descrição longa
A partir do PowerShell 3.0, você pode se desconectar de uma PSSession e se reconectar à PSSession do mesmo computador ou de um computador diferente. O estado da sessão é mantido e os comandos no PSSession continuam a ser executados enquanto a sessão está desconectada.
O recurso Sessões Desconectadas permite fechar a sessão na qual uma PSSession foi criada e desligar o computador sem interromper os comandos em execução na PSSession remota. Sessões desconectadas são úteis para executar comandos que levam muito tempo para serem concluídos.
Não é possível se desconectar de uma sessão interativa iniciada usando o Enter-PSSession
cmdlet.
Você pode usar sessões desconectadas para gerenciar PSSessions que foram desconectadas involuntariamente como resultado de uma interrupção de computador ou rede.
Cmdlets de sessão desconectados
Os cmdlets a seguir oferecem suporte ao recurso Sessões Desconectadas:
Connect-PSSession
: Conecta-se a uma PSSessão desconectada.Disconnect-PSSession
: Desconecta uma PSSession.Get-PSSession
: Obtém PSSessions no computador local ou em computadores remotos.Receive-PSSession
: Obtém os resultados de comandos executados em sessões desconectadas.Invoke-Command
: O parâmetro InDisconnectedSession cria uma PSSession e desconecta-se imediatamente.
Como funciona o recurso Sessões Desconectadas
A partir do PowerShell 3.0, as PSSessions são independentes das sessões nas quais são criadas. As PSSessions ativas são mantidas no computador remoto ou no lado do servidor da conexão, mesmo se o computador do lado do cliente estiver desligado ou desconectado da rede.
No PowerShell 2.0, a PSSession é excluída do computador remoto quando é desconectada da sessão de origem ou a sessão na qual foi criada termina.
Quando você desconecta uma PSSession, a PSSession permanece ativa e é mantida no computador remoto. O estado da sessão muda de Em execução para Desconectado. Você pode se reconectar a uma PSSession desconectada de
- A sessão atual no mesmo computador
- Uma sessão diferente no mesmo computador
- A partir de uma sessão num computador diferente
O computador remoto que mantém a sessão deve estar em execução e conectado à rede.
Os comandos em uma PSSession desconectada continuam a ser executados ininterruptamente no computador remoto até que o comando seja concluído ou o buffer de saída seja preenchido. Para impedir que um buffer de saída completo suspenda um comando, use o parâmetro OutputBufferingMode dos Disconnect-PSSession
cmdlets , New-PSSessionOption
ou New-PSTransportOption
.
As sessões desconectadas são mantidas no estado desconectado no computador remoto. Eles estão disponíveis para você se reconectar até excluir o PSSession, como usando o Remove-PSSession
cmdlet, ou até que o tempo limite ocioso do PSSession expire. Você pode ajustar o tempo limite ocioso de uma PSSession usando os parâmetros IdleTimeoutSec ou IdleTimeout dos Disconnect-PSSession
cmdlets , New-PSSessionOption
ou New-PSTransportOption
.
Outro usuário pode se conectar às PSSessions que você criou, mas somente se puder fornecer as credenciais que foram usadas para criar a sessão ou usar as RunAs
credenciais da configuração da sessão.
Como obter PSSessions
A partir do PowerShell 3.0, o Get-PSSession
cmdlet obtém PSSessions no computador local e nos computadores remotos. Ele também pode obter PSSessions que foram criados na sessão atual.
Para obter PSSessions no computador local ou em computadores remotos, use os parâmetros ComputerName ou ConnectionUri . Sem parâmetros, Get-PSSession
obtém PSSession que foram criados na sessão local, independentemente de onde eles terminam.
O exemplo a seguir mostra como usar Get-PSSession
o .
New-PSSession
cria uma sessão para o computador Server01. A sessão reside no computador Server01.
New-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Para obter a sessão do Server01, use o parâmetro ComputerName para especificar o destino do Get-PSSession
.
Get-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Se o valor do parâmetro ComputerName de Get-PSSession
for localhost, Get-PSSession
obterá PSSessions que terminam em e são mantidos no computador local. Ele não obtém PSSessions no computador Server01, mesmo se eles foram iniciados no computador local.
Get-PSSession -ComputerName localhost
Para obter sessões que foram criadas na sessão atual, use o Get-PSSession
cmdlet sem parâmetros. Neste exemplo, Get-PSSession
obtém a PSSession que foi criada na sessão atual e se conecta ao computador Server01.
Get-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Como desligar sessões
Use o Disconnect-PSSession
cmdlet para desconectar uma sessão. Para identificar o PSSession, use o parâmetro Session ou canalize um objeto PSSession dos New-PSSession
cmdlets ou Get-PSSession
para Disconnect-PSSession
.
O comando a seguir desconecta o PSSession ao computador Server01. Observe que o valor da propriedade State é Desconectado e a Disponibilidade é Nenhuma.
Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Disconnected Microsoft.PowerShell None
Para criar uma sessão desconectada, use o parâmetro InDisconnectedSession do Invoke-Command
cmdlet. Ele cria uma sessão, inicia o comando e desconecta imediatamente, antes que o comando possa retornar qualquer saída.
O comando a seguir executa um Get-WinEvent
comando em uma sessão desconectada no computador remoto Server02.
Invoke-Command -ComputerName Server02 -InDisconnectedSession -ScriptBlock {
Get-WinEvent -LogName "*PowerShell*" }
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 Session3 Server02 Disconnected Microsoft.PowerShell None
Como conectar-se a sessões desconectadas
Para conectar uma sessão desconectada, use o Connect-PSSession
cmdlet com os parâmetros ComputerName ou ConnectionUri . Como alternativa, você pode canalizar a saída de Get-PSSession
para Connect-PSSession
.
O exemplo a seguir obtém as sessões no computador Server02. A saída inclui duas sessões desconectadas.
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
O comando a seguir se conecta a Session2. O PSSession já está aberto e disponível.
Connect-PSSession -ComputerName Server02 -Name Session2
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Opened Microsoft.PowerShell Available
Como obter os resultados
Para obter os resultados dos comandos executados em uma PSSessão desconectada, use o Receive-PSSession
cmdlet.
Você pode usar Receive-PSSession
em vez de usar o Connect-PSSession
cmdlet. Se a sessão já estiver reconectada, Receive-PSSession
obterá os resultados dos comandos executados quando a sessão foi desconectada. Se o PSSession ainda estiver desconectado, conecte-se a ele e, em seguida, Receive-PSSession
obtenha os resultados dos comandos executados enquanto ele foi desconectado.
Receive-PSSession
pode retornar os resultados em um trabalho (de forma assíncrona) ou para o programa host (de forma síncrona). Use o parâmetro OutTarget para selecionar Job ou Host. O valor padrão é Host. No entanto, se o comando que está sendo recebido foi iniciado na sessão atual como um trabalho, ele é retornado como um trabalho por padrão.
O exemplo a seguir usa o Receive-PSSession
cmdlet para se reconectar à sessão no Server02 e obter os Get-WinEvent
resultados do comando. O parâmetro OutTarget é usado para obter os resultados em um Job.
Receive-PSSession -ComputerName Server02 -Name Session3 -OutTarget Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemoteJob Running True Server02
Para obter os resultados do trabalho, use o 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 "W Server02
5/14/2012 7:26:03 PM 600 Information Provider "C Server02
5/14/2012 7:26:03 PM 600 Information Provider "V Server02
Propriedades de Estado e Disponibilidade
As propriedades Estado e Disponibilidade de uma PSSession desconectada informam se a sessão está disponível para você se reconectar a ela.
Quando uma PSSession é conectada à sessão atual, seu estado é Aberto e sua disponibilidade é Disponível. Quando você se desconecta da PSSession, o estado PSSession é Desconectado e sua disponibilidade é Nenhuma.
O valor da propriedade State é relativo à sessão atual. Um valor de Desconectado significa que o PSSession não está conectado à sessão atual. Mas, isso não significa que o PSSession está desconectado de todas as sessões. Ele pode estar conectado a uma sessão diferente.
Para determinar se você pode se conectar ou se reconectar ao PSSession, use a propriedade Availability . Um valor Nenhum indica que você pode se conectar à sessão. Um valor de Ocupado indica que você não pode se conectar ao PSSession porque ele está conectado a outra sessão.
O exemplo a seguir é executado em duas sessões do PowerShell no mesmo computador. Observe os valores variáveis das propriedades State e Availability em cada sessão à medida que o PSSession é desconectado e reconectado.
# 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
As sessões desconectadas são mantidas no computador remoto até que você as exclua, por exemplo, usando o Remove-PSSession
cmdlet, ou até que atinjam o tempo limite. A propriedade IdleTimeout de uma PSSession determina por quanto tempo uma sessão desconectada é mantida antes de ser excluída.
Valores de tempo limite ocioso
PSSessions ficam ociosos quando o fio de batimento cardíaco não recebe resposta. Desconectar uma sessão a torna ociosa e inicia o relógio IdleTimeout , mesmo que os comandos ainda estejam em execução na sessão desconectada. O PowerShell considera as sessões desconectadas ativas, mas ociosas.
Ao criar e desconectar sessões, verifique se o tempo limite ocioso no PSSession é longo o suficiente para manter a sessão de acordo com suas necessidades, mas não tanto tempo que consuma recursos desnecessários no computador remoto.
A propriedade IdleTimeoutMs da configuração de sessão determina o tempo limite ocioso padrão de sessões que usam a configuração de sessão. Você pode substituir o valor padrão, mas esse valor não pode exceder a propriedade MaxIdleTimeoutMs da configuração da sessão.
Use o comando a seguir para obter os valores de IdleTimeoutMs e MaxIdleTimeoutMs para uma configuração de sessão.
Get-PSSessionConfiguration |
Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs
Se você for membro do grupo Administradores no computador remoto, poderá definir esses valores ao criar uma configuração de sessão. Além disso, você pode alterar os valores ao se desconectar.
O valor de tempo limite ocioso das configurações de sessão e opções de sessão é em milissegundos. O valor de tempo limite ocioso das sessões e opções de configuração de sessão é em segundos.
Você pode definir o tempo limite ocioso de uma PSSession ao criar a PSSession (New-PSSession
, Invoke-Command
) e ao se desconectar dela (Disconnect-PSSession
). No entanto, você não pode alterar o valor IdleTimeout quando você se conecta ao PSSession (Connect-PSSession
) ou obtém resultados (Receive-PSSession
).
Os Connect-PSSession
cmdlets e Receive-PSSession
têm um parâmetro SessionOption que usa um objeto PSSessionOption , como um retornado pelo New-PSSessionOption
cmdlet.
O valor IdleTimeout no objeto SessionOption e o valor IdleTimeout na $PSSessionOption
variável de preferência não alteram o valor do comando IdleTimeout em um Connect-PSSession
ou Receive-PSSession
.
Para criar uma PSSession com um determinado valor de tempo limite ocioso, crie uma $PSSessionOption
variável de preferência. Defina o valor da propriedade IdleTimeout para o valor desejado (em milissegundos).
Quando você cria PSSessions, os valores na $PSSessionOption
variável têm precedência sobre os valores na configuração da sessão.
Por exemplo, o comando a seguir define um tempo limite ocioso de 48 horas:
$PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000
Para criar uma PSSession com um determinado valor de tempo limite ocioso, use o parâmetro IdleTimeoutMSec do New-PSSessionOption
cmdlet. Em seguida, use a opção session no valor do parâmetro SessionOption dos New-PSSession
cmdlets or Invoke-Command
.
Os valores definidos ao criar a sessão têm precedência sobre os valores definidos na variável de preferência e na $PSSessionOption
configuração da sessão.
Por exemplo:
$o = New-PSSessionOption -IdleTimeoutMSec 172800000
New-PSSession -SessionOption $o
Para alterar o tempo limite ocioso de uma PSSession ao se desconectar, use o parâmetro IdleTimeoutSec do Disconnect-PSSession
cmdlet.
Por exemplo:
Disconnect-PSSession -IdleTimeoutSec 172800
Para criar uma configuração de sessão com um determinado tempo limite de ociosidade e tempo limite máximo de inatividade, use os parâmetros IdleTimeoutSec e MaxIdleTimeoutSec do New-PSTransportOption
cmdlet. Em seguida, use a opção de transporte no valor do parâmetro TransportOption de Register-PSSessionConfiguration
.
Por exemplo:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Register-PSSessionConfiguration -Name Test -TransportOption $o
Para alterar o tempo limite de ociosidade padrão e o tempo limite máximo de ociosidade de uma configuração de sessão, use os parâmetros IdleTimeoutSec e MaxIdleTimeoutSec do New-PSTransportOption
cmdlet. Em seguida, use a opção de transporte no valor do parâmetro TransportOption de Set-PSSessionConfiguration
.
Por exemplo:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Set-PSSessionConfiguration -Name Test -TransportOption $o
Modo de buffer de saída
O modo de buffer de saída de um PSSession determina como a saída do comando é gerenciada quando o buffer de saída do PSSession está cheio.
Em uma sessão desconectada, o modo de buffer de saída determina efetivamente se o comando continua a ser executado enquanto a sessão está desconectada.
Os valores válidos são os seguintes:
Block
(padrão) - Quando o buffer de saída está cheio, a execução é suspensa até que o buffer esteja limpo.Block
preserva dados, mas pode interromper o comando.Drop
- Quando o buffer de saída está cheio, a execução continua. À medida que uma nova saída é gerada, a saída mais antiga é descartada. Ao usar oDrop
valor, redirecione a saída para um arquivo. Esse valor é recomendado para sessões desconectadas.
A propriedade OutputBufferingMode da configuração da sessão determina o modo de buffer padrão das sessões que usam a configuração da sessão.
Para localizar o valor de uma configuração de sessão do OutputBufferingMode, você pode usar um dos seguintes formatos de comando:
(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode
Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode
Você pode substituir o valor padrão na configuração da sessão e definir o modo de buffer de saída de uma PSSession quando criar uma PSSession, quando se desconectar e quando se reconectar.
Se você for membro do grupo Administradores no computador remoto, poderá criar e alterar o modo de buffer de saída das configurações de sessão.
Para criar uma PSSession com um modo de buffer de saída de Drop
, crie uma $PSSessionOption
variável de preferência na qual o valor da propriedade OutputBufferingMode é Drop
.
Quando você cria PSSessions, os valores na $PSSessionOption
variável têm precedência sobre os valores na configuração da sessão.
Por exemplo:
$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop
Use o parâmetro OutputBufferingMode do New-PSSessionOption
cmdlet para criar uma opção de sessão com o valor de Drop
. Em seguida, use o objeto PSSessionOption como valor do parâmetro SessionOption dos New-PSSession
cmdlets or Invoke-Command
.
Os valores definidos ao criar a sessão têm precedência sobre os valores definidos na variável de preferência e na $PSSessionOption
configuração da sessão.
Por exemplo:
$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o
Para alterar o modo de buffer de saída de um PSSession ao desconectar, use o parâmetro OutputBufferingMode do Disconnect-PSSession
cmdlet.
Por exemplo:
Disconnect-PSSession -OutputBufferingMode Drop
Para alterar o modo de buffer de saída de um PSSession ao se reconectar, use o parâmetro OutputBufferingMode do New-PSSessionOption
cmdlet. Em seguida, use a opção session no valor do parâmetro SessionOption de Connect-PSSession
ou Receive-PSSession
.
Por exemplo:
$o = New-PSSessionOption -OutputBufferingMode Drop
Connect-PSSession -ComputerName Server01 -Name Test -SessionOption $o
Para criar uma configuração de sessão com um modo de buffer de saída padrão do Drop
, use o parâmetro OutputBufferingMode do New-PSTransportOption
cmdlet para criar um objeto de opção de transporte com um valor de Drop
. Em seguida, use a opção de transporte no valor do parâmetro TransportOption de Register-PSSessionConfiguration
.
Por exemplo:
$o = New-PSTransportOption -OutputBufferingMode Drop
Register-PSSessionConfiguration -Name Test -TransportOption $o
Para alterar o modo de buffer de saída padrão de uma configuração de sessão, use o parâmetro OutputBufferingMode do New-PSTransportOption
cmdlet para criar uma opção de transporte com o valor de Drop
. Em seguida, use a opção Transport no valor do parâmetro SessionOption de Set-PSSessionConfiguration
.
Por exemplo:
$o = New-PSTransportOption -OutputBufferingMode Drop
Set-PSSessionConfiguration -Name Test -TransportOption $o
Desconectando sessões de loopback
Sessões de loopback, ou sessões locais, são PSSessions que se originam e terminam no mesmo computador. Como outras PSSessions, as sessões de loopback ativas são mantidas no computador na extremidade remota da conexão (o computador local), para que você possa se desconectar e se reconectar às sessões de loopback.
Por padrão, as sessões de loopback são criadas com um token de segurança de rede que não permite que comandos executados na sessão acessem outros computadores. Você pode se reconectar a sessões de loopback que tenham um token de segurança de rede de qualquer sessão no computador local ou em um computador remoto.
No entanto, se você usar o parâmetro EnableNetworkAccess do cmdlet , Enter-PSSession
ou , a Invoke-Command
sessão de loopback será criada com um token de New-PSSession
segurança interativo. O token interativo permite que comandos executados na sessão de loopback obtenham dados de outros computadores.
Você pode desconectar sessões de loopback com tokens interativos e, em seguida, reconectar-se a eles a partir da mesma sessão ou de uma sessão diferente no mesmo computador. No entanto, para evitar acesso mal-intencionado, você pode se reconectar a sessões de loopback com tokens interativos somente do computador no qual eles foram criados.
Aguardando trabalhos em sessões desconectadas
O Wait-Job
cmdlet aguarda até que um trabalho seja concluído e, em seguida, retorna ao prompt de comando ou ao próximo comando. Por padrão, Wait-Job
retorna se a sessão na qual um trabalho está sendo executado estiver desconectada. Para direcionar o Wait-Job
cmdlet a aguardar até que a sessão seja reconectada, no estado Aberto, use o parâmetro Force. Para obter mais informações, consulte Wait-Job.
Sessões robustas e desconexão não intencional
Uma PSSession pode ser desconectada involuntariamente devido a uma falha do computador ou interrupção da rede. O PowerShell tenta recuperar a PSSession, mas seu sucesso depende da gravidade e da duração da causa.
O estado de uma PSSession desconectada involuntariamente pode ser Quebrado ou Fechado, mas também pode ser Desconectado. Se o valor de State for Disconnected, você poderá usar as mesmas técnicas para gerenciar o PSSession como faria se a sessão fosse desconectada intencionalmente. Por exemplo, você pode usar o Connect-PSSession
cmdlet para se reconectar à sessão e o Receive-PSSession
cmdlet para obter resultados de comandos executados enquanto a sessão foi desconectada.
Se você fechar (sair) a sessão na qual uma PSSession foi criada enquanto os comandos estão sendo executados na PSSession, o PowerShell manterá a PSSession no estado Desconectado no computador remoto. Se você fechar (sair) a sessão na qual uma PSSession foi criada, mas nenhum comando estiver sendo executado na PSSession, o PowerShell não tentará manter a PSSession.
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários