Criar e gerenciar PSSessions persistentes usando o Windows PowerShell

Concluído

Você usa o comando New-PSSession para criar uma conexão persistente. O comando contém muitos dos mesmos parâmetros de Invoke-Command, incluindo -Credential, –Port e –UseSSL. Isso ocorre porque você está criando uma conexão idêntica à que o Invoke-Command cria. No entanto, em vez de fechar essa conexão imediatamente, você a deixará em execução.

As sessões do PowerShell têm um tempo limite ocioso, após o qual o computador remoto as fechará automaticamente. Uma sessão fechada do PowerShell difere de uma sessão desconectada do PowerShell, pois as sessões fechadas do PowerShell não podem ser reconectadas. Nesse caso, você só pode remover a sessão do PowerShell e recriá-la.

New-PSSession pode aceitar vários nomes de computador, o que faz com que ele crie vários objetos de sessão do PowerShell. Quando você executa o comando New-PSSession, ele gera objetos que representam as sessões recém-criadas do PowerShell. Você pode atribuir essas sessões do PowerShell a uma variável para facilitar referir-se a elas e usá-las no futuro.

Você pode usar uma sessão do PowerShell assim que a criar. Os comandos Invoke-Command e Enter-PSSession podem aceitar um objeto de sessão do PowerShell em vez de um nome de computador. Invoke-Command pode aceitar vários objetos de sessão do PowerShell. Você usa o parâmetro –Session dos comandos para essa finalidade. Quando você usa esse parâmetro, os comandos usam a sessão existente do PowerShell em vez de criar uma nova conexão. Quando o comando terminar de ser executado ou você sair da sessão do PowerShell, a sessão do PowerShell permanecerá em execução e conectada e estará pronta para uso futuro.

Por exemplo, você pode usar os seguintes comandos para inserir uma sessão do PowerShell no LON-CL1 e, depois, fechá-la:

$client = New-PSSession –ComputerName LON-CL1
Enter-PSSession –Session $client
Exit-PSSession

Como alternativa, você pode usar os seguintes comandos para obter os mesmos resultados:

$computers = New-PSSession –ComputerName LON-CL1,LON-DC1
Invoke-Command –Session $computers –ScriptBlock { Get-Process }

Por exemplo, o comando a seguir pode usar a variável $dc para abrir uma sessão do PowerShell para LON-DC1 em um script ou bloco de código:

$dc = New-PSSession –ComputerName LON-DC1

O comando a seguir cria sessões remotas no Server01 e no Server02 e os objetos de sessão são armazenados na variável $s:

$s = New-PSSession -ComputerName Server01, Server02

Agora que as sessões foram estabelecidas, você pode executar qualquer comando nelas. E como as sessões são persistentes, você pode coletar dados de um comando e usá-los em outro comando.

Por exemplo, o comando a seguir executa um comando Get-Hotfix em sessões na variável $s e salva os resultados na variável $h:

Invoke-Command -Session $s {$h = Get-HotFix}

A variável $h é criada em cada uma das sessões em $s, mas não existe na sessão local. Agora você pode usar os dados na variável $h com outros comandos na mesma sessão, e os resultados são exibidos no computador local. Por exemplo:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}