about_PSSession_Details
Descrição breve
Fornece informações detalhadas sobre as sessões do PowerShell e a função que elas desempenham nos comandos remotos.
Descrição longa
Uma sessão é um ambiente no qual o PowerShell é executado. Uma sessão é criada para você sempre que você inicia o PowerShell. Você pode criar sessões adicionais, chamadas de "sessões do PowerShell" ou "PSSessions" em seu computador ou em outro computador.
Ao contrário das sessões que o PowerShell cria para você, você controla e gerencia as PSSessions que cria.
PSSessions desempenham um papel importante na computação remota. Quando você cria um PSSession conectado a um computador remoto, o PowerShell estabelece uma conexão persistente com o computador remoto para dar suporte ao PSSession. Você pode usar o PSSession para executar uma série de comandos, funções e scripts que compartilham dados.
Este tópico fornece informações detalhadas sobre sessões e PSSessions no PowerShell. Para obter informações básicas sobre as tarefas que você pode executar com sessões, consulte about_PSSessions.
Sobre as sessões
Tecnicamente, uma sessão é um ambiente de execução no qual o PowerShell é executado. Cada sessão inclui uma instância do mecanismo System.Management.Automation e um programa host no qual o PowerShell é executado. O host pode ser o console familiar do PowerShell ou outro programa que executa comandos, como o Cmd.exe, ou um programa criado para hospedar o PowerShell, como o ISE (Ambiente de Script Integrado) do Windows PowerShell. Do ponto de vista do Windows, uma sessão é um processo do Windows no computador de destino.
Cada sessão é configurada de forma independente. Ele inclui suas próprias propriedades, sua própria política de execução e seus próprios perfis. O ambiente que existe quando a sessão é criada persiste por seu tempo de vida, mesmo que você altere o ambiente no computador. Todas as sessões são criadas em um escopo global, até mesmo as sessões que você cria em um script.
Você pode executar apenas um comando (ou pipeline de comando) em uma sessão por vez. Um segundo comando executado de forma síncrona (um de cada vez) aguarda até quatro minutos para que o primeiro comando seja concluído. Um segundo comando executado de forma assíncrona (simultaneamente) falha.
Sobre o PSSessions
Uma sessão é criada sempre que você inicia o PowerShell. E o PowerShell cria sessões temporárias para executar comandos individuais. No entanto, você também pode criar sessões (chamadas de "sessões do PowerShell" ou "PSSessions") que você controla e gerencia.
PSSessions são essenciais para comandos remotos. Se você usar o parâmetro ComputerName dos cmdlets orEnter-PSSession
, o Invoke-Command
PowerShell estabelecerá uma sessão temporária para executar o comando e fechará a sessão assim que o comando ou a sessão interativa for concluída.
No entanto, se você usar o New-PSSession
cmdlet para criar um PSSession, o PowerShell estabelecerá uma sessão persistente no computador remoto na qual você pode executar vários comandos ou sessões interativas. Os PSSessions que você cria permanecem abertos e disponíveis para uso até que você os exclua ou até que você feche a sessão na qual eles foram criados.
Quando você cria um PSSession em um computador remoto, o sistema cria um processo do PowerShell no computador remoto e estabelece uma conexão do computador local com o processo no computador remoto. Quando você cria um PSSession no computador local, o novo processo e as conexões são criados no computador local.
Quando preciso de um PSSession?
Os Invoke-Command
cmdlets e Enter-PSSession
têm os parâmetros ComputerName e Session . Você pode usar qualquer um para executar um comando remoto.
Use o parâmetro ComputerName para executar um único comando ou uma série de comandos não relacionados em um ou vários computadores.
Para executar comandos que compartilham dados, você precisa de uma conexão persistente com o computador remoto. Nesse caso, crie um PSSession e use o parâmetro Session para executar comandos no PSSession.
Muitos outros cmdlets que obtêm dados de computadores remotos, como Get-Process
, Get-Service
, Get-EventLog
, e Get-WmiObject
têm apenas um parâmetro ComputerName . Eles usam tecnologias diferentes da comunicação remota do PowerShell para coletar dados remotamente. Esses cmdlets não têm um parâmetro Session , mas você pode usar o Invoke-Command
cmdlet para executar esses comandos em um PSSession.
Como faço para criar um PSSession?
Para criar um PSSession, use o New-PSSession
cmdlet. Você pode usar New-PSSession
para criar um PSSession em um computador local ou remoto.
Posso criar um PSSession em qualquer computador?
Para criar um PSSession conectado a um computador remoto, o computador deve ser configurado para comunicação remota no PowerShell. O usuário atual deve ser membro do grupo Administradores no computador remoto ou o usuário atual deve ser capaz de fornecer as credenciais de um membro do grupo Administradores. Para obter mais informações, confira about_Remote_Requirements.
Posso ver minhas PSSessions em outras sessões?
A partir do Windows PowerShell 3.0, o parâmetro ComputerName do Get-PSSession
cmdlet obtém PSSessions que você criou nos computadores remotos especificados.
PSSessions ativos são mantidos no computador remoto (o "lado do servidor" de uma conexão) e você pode obtê-los de qualquer sessão em qualquer computador.
Por exemplo, se você criar um PSSession do computador Server01 para o computador Server02 e, em seguida, alternar para o computador Server03, poderá usar um comando como o seguinte para obter a sessão.
Get-PSSession -ComputerName Server02
Mesmo se você se desconectar da sessão, a sessão será mantida no computador remoto até que você a exclua ou ela atinja o tempo limite.
No Windows PowerShell 2.0, você pode obter apenas os PSSessions que você criou na sessão atual. Você não pode obter PSSessions que você criou em outras sessões.
Para obter mais informações, consulte Get-PSSession.
Posso ver as PSSessions que outras pessoas criaram no meu computador?
Você pode obter e gerenciar apenas os PSSessions que outras pessoas criaram somente se puder fornecer as credenciais do usuário que criou o PSSession ou se a configuração de sessão que o PSSession usa incluir credenciais RunAs. Caso contrário, você pode obter, conectar-se, usar e gerenciar apenas os PSSessions que você criou.
Posso me conectar a um PSSession de um computador diferente?
A partir do Windows PowerShell 3.0, as PSSessions em computadores Windows são independentes das sessões nas quais foram criadas. PSSessions ativos são mantidos no computador no remoto ou "lado do servidor" de uma conexão.
Em um computador Windows, você pode usar o Disconnect-PSSession
cmdlet para se desconectar de um PSSession. O PSSession é desconectado da sessão local, mas é mantido no computador remoto.
Os comandos continuam a ser executados no PSSession desconectado. Você pode fechar o PowerShell e desligar o computador de origem sem interromper o PSSession.
Em seguida, mesmo horas depois, você pode usar o Get-PSSession
cmdlet para obter o PSSession e o Connect-PSSession
cmdlet para se conectar ao PSSession de uma nova sessão em um computador Windows diferente.
Para obter mais informações, consulte about_Remote_Disconnected_Sessions.
O que acontece com meu PSSession se meu computador parar?
PSSessões desconectadas são independentes das sessões em que foram criadas. Se você desconectar um PSSession e fechar o computador de origem, o PSSession será mantido no computador remoto.
Além disso, o PowerShell tenta recuperar PSSessions ativos que são desconectados involuntariamente, como por uma reinicialização do computador, uma queda temporária de energia ou interrupção da rede. O PowerShell tenta manter ou recuperar o PSSession para um estado Aberto, se a sessão de origem ainda estiver disponível, ou para um estado desconectado se não estiver.
Um PSSession "ativo" é aquele que está executando comandos. Se um PSSession estiver conectado (não desconectado) e os comandos estiverem em execução no PSSession quando a sessão conectada for fechada, o PowerShell tentará manter o PSSession no computador remoto. No entanto, se nenhum comando estiver em execução no PSSession, o PowerShell fechará o PSSession quando a sessão conectada for fechada.
Para obter mais informações, consulte about_Remote_Disconnected_Sessions.
Posso executar um trabalho em segundo plano em um PSSession?
Sim. Um trabalho em segundo plano é um comando executado de forma assíncrona em segundo plano sem interagir com a sessão atual. Quando você envia um comando para iniciar um trabalho, o comando retorna um objeto de trabalho, mas o trabalho continua a ser executado em segundo plano até que seja concluído.
Para iniciar um trabalho em segundo plano em um computador local, use o Start-Job
comando.
Você pode executar o trabalho em segundo plano em uma conexão temporária (usando o parâmetro ComputerName ) ou em um PSSession (usando o parâmetro Session ).
Para iniciar um trabalho em segundo plano em um computador remoto, use o Invoke-Command
cmdlet com seu parâmetro AsJob ou use o Invoke-Command
cmdlet para executar um Start-Job
comando em um computador remoto. Ao usar o parâmetro AsJob , você pode usar os parâmetros ComputerName ou Session .
Ao usar Invoke-Command
para executar um Start-Job
comando, você deve executar o comando em um PSSession. Se você usar o parâmetro ComputerName , o PowerShell encerrará a conexão quando o objeto de trabalho retornar e o trabalho for interrompido.
Para obter mais informações, consulte about_Jobs.
Posso executar uma sessão interativa?
Sim. Para iniciar uma sessão interativa com um computador remoto, use o Enter-PSSession
cmdlet. Em uma sessão interativa, os comandos digitados são executados no computador remoto, como se você os digitasse diretamente no computador remoto.
Você pode executar uma sessão interativa em uma sessão temporária (usando o parâmetro ComputerName ) ou em um PSSession (usando o parâmetro Session ). Se você usar um PSSession, o PSSession reterá os dados dos comandos anteriores e o PSSession reterá todos os dados gerados durante a sessão interativa para uso em comandos posteriores.
Quando você encerra a sessão interativa, o PSSession permanece aberto e disponível para uso.
Para obter mais informações, consulte Enter-PSSession e Exit-PSSession.
Devo excluir o PSSessions?
Sim. Um PSSession é um processo, que é um ambiente independente que usa memória e outros recursos mesmo quando você não o está usando. Quando terminar de usar um PSSession, exclua-o. Se você criar vários PSSessions, feche os que não está usando e mantenha apenas os que estão em uso no momento.
Para excluir PSSessions, use o Remove-PSSession
cmdlet. Ele exclui os PSSessions e libera todos os recursos que eles estavam usando.
Você também pode usar o parâmetro IdleTimeOut de New-PSSessionOption
para fechar um PSSession ocioso após um intervalo especificado. Para obter mais informações, consulte New-PSSessionOption.
Se você salvar um objeto PSSession em uma variável e, em seguida, excluir o PSSession ou deixá-lo atingir o tempo limite, a variável ainda conterá o objeto PSSession, mas o PSSession não estará ativo e não poderá ser usado ou reparado.
Todas as sessões e PSSessions são iguais?
Não. Os desenvolvedores podem criar sessões personalizadas que incluem apenas provedores e cmdlets selecionados. Se um comando funcionar em uma sessão, mas não em outra, pode ser porque a sessão é restrita.