about_PSSession_Details

Breve descrição

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" no seu computador ou em outro computador.

Ao contrário das sessões que o PowerShell cria para você, você controla e gerencia as PSSessions criadas.

PSSessions desempenham um papel importante na computação remota. Quando você cria uma PSSession conectada a um computador remoto, o PowerShell estabelece uma conexão persistente com o computador remoto para dar suporte à 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 durante o seu tempo de vida mesmo se alterar o ambiente no computador. Todas as sessões são criadas em um escopo global, mesmo as sessões que você cria em um script.

Você pode executar apenas um comando (ou pipeline de comando) em uma sessão de cada 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 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 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, 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 uma 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é fechar a sessão na qual elas foram criadas.

Quando você cria uma 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 uma PSSession no computador local, o novo processo e as conexões são criadas no computador local.

Quando preciso de uma PSSession?

Os Invoke-Command cmdlets e Enter-PSSession têm 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 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 usá-lo Invoke-Command para executar esses comandos em uma PSSession.

Como faço para criar uma PSSession?

Para criar um PSSession, use o New-PSSession cmdlet. Você pode usar New-PSSession para criar uma PSSession em um computador local ou remoto.

Posso criar uma PSSession em qualquer computador?

Para criar uma PSSession conectada 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 as minhas PSSessions noutras 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 uma 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 que você se desconecte 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 as PSSessions que você criou na sessão atual. Não é possível obter PSSessions criados 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 somente as PSSessions que outras pessoas criaram somente se puder fornecer as credenciais do usuário que criou a PSSession ou se a configuração de sessão que a PSSession usa incluir credenciais RunAs. Caso contrário, você pode obter, conectar-se, usar e gerenciar apenas as PSSessions que você criou.

Posso conectar-me a uma PSSession a partir de um computador diferente?

A partir do Windows PowerShell 3.0, as PSSessions em computadores Windows são independentes das sessões em que 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 uma PSSession. O PSSession é desconectado da sessão local, mas é mantido no computador remoto. Os comandos continuam a ser executados na PSSessão desconectada. Você pode fechar o PowerShell e desligar o computador de origem sem interromper a 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 à minha PSSession se o meu computador parar?

PSSessions desconectados são independentes das sessões em que foram criadas. Se você desconectar uma PSSession e, em seguida, fechar o computador de origem, a PSSession será mantida no computador remoto.

Além disso, o PowerShell tenta recuperar PSSessions ativas que são desconectadas involuntariamente, como por uma reinicialização do computador, uma queda de energia temporária ou interrupção da rede. O PowerShell tenta manter ou recuperar a 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 uma PSSession estiver conectada (não desconectada) e os comandos estiverem sendo executados na PSSession quando a sessão conectada for fechada, o PowerShell tentará manter a 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 uma PSSession?

Sim. Um trabalho em segundo plano é um comando que é 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 uma 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, veja 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 uma PSSession (usando o parâmetro Session ). Se você usar um PSSession, o PSSession retém os dados de comandos anteriores e o PSSession retém 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 um PSSession, exclua-o. Se você criar várias PSSessions, feche as que não está usando e mantenha apenas as que estão em uso no momento.

Para excluir PSSessions, use o Remove-PSSession cmdlet. Ele exclui as PSSessions e libera todos os recursos que eles estavam usando.

Você também pode usar o parâmetro IdleTimeOut de New-PSSessionOption para fechar uma PSSession ociosa 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 conterá 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.º 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.

Consulte também