about_PSSession_Details

Descrição breve

Fornece informações detalhadas sobre sessões do PowerShell e a função que desempenham em 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 "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 você 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 oferecer 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 Cmd.exe, ou um programa criado para hospedar o PowerShell, como o Windows PowerShell Integrated Scripting Environment (ISE). De uma perspectiva do Windows, uma sessão é um processo do Windows no computador de destino.

Cada sessão é configurada independentemente. 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 se você alterar o ambiente no computador. Todas as sessões são criadas em um escopo global, até mesmo as sessões criadas em um script.

Você pode executar apenas um comando (ou pipeline de comando) em uma sessão ao mesmo tempo. 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. Além disso, 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 críticos para comandos remotos. Se você usar o parâmetro ComputerName dos cmdlets ouEnter-PSSession, o Invoke-Command PowerShell estabelecerá uma sessão temporária para executar o comando e, em seguida, 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ê poderá executar vários comandos ou sessões interativas. As PSSessions que você cria permanecem abertas e disponíveis para uso até que você as exclua ou até que você feche a sessão na qual foram criadas.

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 criadas 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 deles 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, em seguida, use o parâmetro Session para executar comandos no PSSession.

Muitos outros cmdlets que obtêm dados de computadores remotos, como , , e Get-WmiObject têm apenas um parâmetro ComputerName. Get-EventLogGet-ServiceGet-Process Eles usam outras tecnologias além 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, consulte about_Remote_Requirements.

Posso ver minhas PSSessions em outras sessões?

A partir do Windows PowerShell 3.0, o Get-PSSession parâmetro ComputerName do 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, você pode 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 atinja o tempo limite.

No Windows PowerShell 2.0, você pode obter apenas os PSSessions que você criou na sessão atual. Não é possível obter PSSessions que você criou em outras sessões.

Para obter mais informações, consulte Get-PSSession.

Posso ver os PSSessions que outras pessoas criaram no meu computador?

Você pode obter e gerenciar somente as PSSessions que outras pessoas criaram somente se puder fornecer as credenciais do usuário que criou o PSSession ou a configuração de sessão que o PSSession usa inclui credenciais RunAs. Caso contrário, você poderá obter, conectar-se, usar e gerenciar somente 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 o meu PSSession se o meu computador parar?

PSSessions desconectados são independentes das sessões em que foram criados. Se você desconectar um PSSession e, em seguida, feche o computador de origem, o PSSession é 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 de energia temporária ou interrupção de 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 sendo executados 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é ser 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 de comandos anteriores e o PSSession reterá todos os dados gerados durante a sessão interativa para uso em comandos posteriores.

Quando você termina 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 as PSSessions?

Sim. Um PSSession é um processo, que é um ambiente autônomo que usa memória e outros recursos mesmo quando você nã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 expirar, a variável ainda contém o objeto PSSession, mas o PSSession não está ativo e não pode 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 funciona em uma sessão, mas não em outra, pode ser porque a sessão é restrita.

Confira também