Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 cmdlet Enter-PSSession.
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 PSSession desconetada. -
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: parâmetro InDisconnectedSession cria uma PSSession e desconecta imediatamente.
Como funciona o recurso de 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 do lado do servidor da conexão, mesmo se computador lado do cliente for 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 cmdlets Disconnect-PSSession, New-PSSessionOptionou New-PSTransportOption.
As sessões desconectadas são mantidas no estado desconectado no computador remoto. Eles estão disponíveis para te reconectares até eliminares a sessão PSSession, como usando o cmdlet Remove-PSSession, ou até que o tempo limite inativo da sessão PSSession expire. Você pode ajustar o tempo limite de inatividade de uma sessão PowerShell (PSSession) usando o parâmetro IdleTimeoutSec ou o parâmetro IdleTimeout dos cmdlets Disconnect-PSSession, New-PSSessionOptionou New-PSTransportOption.
Outro usuário pode se conectar ao PSSessions que você criou, mas somente se ele puder fornecer as credenciais que foram usadas para criar a sessão ou usar as credenciais RunAs da configuração da sessão.
Como obter PSSessions
A partir do PowerShell 3.0, o cmdlet Get-PSSession obtém PSSessions no computador local e em 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.
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 de 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 obtém PSSessions que são terminadas e mantidas no computador local. Não se obtêm PSSessions no computador Server01, mesmo que tenham sido iniciadas no computador local.
Get-PSSession -ComputerName localhost
Para obter sessões que foram criadas na sessão atual, use o cmdlet Get-PSSession sem parâmetros. Neste exemplo, Get-PSSession obtém o PSSession que foi criado 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 cmdlet Disconnect-PSSession para desconectar uma sessão. Para identificar o PSSession, use o parâmetro Session ou canalize um objeto PSSession dos cmdlets New-PSSession 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 propriedade Disponibilidade é Nenhum.
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 cmdlet Invoke-Command. 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 comando Get-WinEvent 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 cmdlet Connect-PSSession 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 de comandos executados em uma PSSessão desconectada, use o cmdlet Receive-PSSession.
Você pode usar Receive-PSSession em vez de usar o cmdlet Connect-PSSession. 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, Receive-PSSession se conecta a ele e, em seguida, obtém 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). Utilize o parâmetro OutTarget para selecionar Job ou Host. O valor padrão é Host. No entanto, se o comando que está a ser recebido foi iniciado na sessão atual como um Trabalho , ele será retornado como um Trabalho por padrão.
O exemplo a seguir usa o cmdlet Receive-PSSession para se reconectar à sessão no Server02 e obter os resultados do comando Get-WinEvent. 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 cmdlet Receive-Job.
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 State e Availability 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, o seu estado é Aberto e a sua disponibilidade é Disponível. Quando você se desconecta do PSSession, o estado PSSession é Desconectado e sua disponibilidade é Nenhum.
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. Pode estar conectado a uma sessão diferente.
Para determinar se podes conectar-te ou reconectar-te ao PSSession, usa a propriedade Availability. Um valor de 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é serem eliminadas, por exemplo, usando o cmdlet Remove-PSSession, ou até expirarem. A propriedade IdleTimeout de uma PSSession determina quanto tempo uma sessão desconectada é mantida antes de ser eliminada.
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 de ociosidade padrão das 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 quando se desconectar dela (Disconnect-PSSession). No entanto, não é possível alterar o valor de IdleTimeout ao ligar-se à PSSession (Connect-PSSession) ou ao obter resultados (Receive-PSSession).
Os cmdlets Connect-PSSession e Receive-PSSession têm um parâmetro SessionOption que aceita um objeto PSSessionOption, como um retornado pelo cmdlet New-PSSessionOption.
O valor IdleTimeout no objeto SessionOption e o valor IdleTimeout na variável de preferência $PSSessionOption não alteram o valor do IdleTimeout num comando Connect-PSSession ou Receive-PSSession.
Para criar uma PSSession com um determinado valor de tempo limite ocioso, crie uma variável de preferência $PSSessionOption. Defina o valor da propriedade IdleTimeout para o valor desejado (em milissegundos).
Quando você cria PSSessions, os valores em $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 cmdlet New-PSSessionOption. Em seguida, use a opção de sessão no valor do parâmetro SessionOption dos cmdlets New-PSSession ou Invoke-Command.
Os valores definidos ao criar a sessão têm precedência sobre os valores definidos na variável de preferência $PSSessionOption e na 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 desconectar, use o parâmetro IdleTimeoutSec do cmdlet Disconnect-PSSession.
Por exemplo:
Disconnect-PSSession -IdleTimeoutSec 172800
Para criar uma configuração de sessão com um tempo limite de inatividade específico e com um tempo limite máximo de inatividade, utilize os parâmetros IdleTimeoutSec e MaxIdleTimeoutSec do cmdlet New-PSTransportOption. Em seguida, utilize a opção de transporte no parâmetro TransportOption do valor 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 cmdlet New-PSTransportOption. Em seguida, utilize a opção de transporte no parâmetro TransportOption do valor 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.Blockpreserva os 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 o valorDrop, 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 encontrar o valor da configuração de sessão do OutputBufferingMode, 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 ao criar, desconectar ou reconectar uma PSSession.
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 variável de preferência $PSSessionOption na qual o valor da propriedade OutputBufferingMode é Drop.
Quando você cria PSSessions, os valores em $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 cmdlet New-PSSessionOption para criar uma opção de sessão atribuída um valor de Drop. Em seguida, use o objeto PSSessionOption como valor do parâmetro SessionOption dos cmdlets New-PSSession ou Invoke-Command.
Os valores definidos ao criar a sessão têm precedência sobre os valores definidos na variável de preferência $PSSessionOption e na 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 uma PSSession ao desconectar, use o parâmetro OutputBufferingMode do cmdlet Disconnect-PSSession.
Por exemplo:
Disconnect-PSSession -OutputBufferingMode Drop
Para alterar o modo de bufferização de saída de uma sessão do PowerShell ao reconectar-se, use o parâmetro OutputBufferingMode do cmdlet New-PSSessionOption. 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 de Drop, use o parâmetro OutputBufferingMode do cmdlet New-PSTransportOption para criar um objeto de opção de transporte com um valor de Drop. Em seguida, utilize a opção de transporte no parâmetro TransportOption do valor 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 cmdlet New-PSTransportOption para criar uma opção de transporte com um valor de Drop. Em seguida, utilize 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 New-PSSession, Enter-PSSessionou Invoke-Command, a sessão de loopback será criada com um token de 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 cmdlet Wait-Job 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 cmdlet Wait-Job a aguardar até que a sessão seja reconectada, quando estiver no estado Aberto, utilize 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 Desconectado, 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 cmdlet Connect-PSSession para se reconectar à sessão e o cmdlet Receive-PSSession para obter resultados de comandos executados enquanto a sessão estava desconectada.
Se fechares (ou saíres) da sessão na qual uma PSSession foi criada enquanto os comandos estão a ser 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
- about_Jobs
- about_Remote
- about_Remote_Variables
- about_PSSessions
- about_Session_Configurations
- Invocar-Comando
- Connect-PSSession
- Desconexão-PSSession
- Get-PSSession
- Receber-PSSession