about_PSSessions
Breve descrição
Descreve as sessões do PowerShell (PSSessions) e explica como estabelecer uma ligação persistente a um computador remoto.
Descrição longa
Para executar comandos do PowerShell num computador remoto, pode utilizar o parâmetro ComputerName de um cmdlet ou pode criar uma sessão do PowerShell (PSSession) e executar comandos na PSSession.
Quando cria uma PSSession, o PowerShell estabelece uma ligação persistente ao computador remoto. Utilize uma PSSession para executar uma série de comandos relacionados num computador remoto. Os comandos que são executados na mesma PSSession podem partilhar dados, como os valores de variáveis, aliases e funções.
Também pode criar uma PSSession no computador local e executar comandos no mesmo. Uma PSSession local utiliza a infraestrutura remota do PowerShell para criar e manter a PSSession.
A partir da Windows PowerShell 3.0, as PSSessions no Windows são independentes das sessões em que são criadas. As PSSessions ativas são mantidas no computador remoto (ou no computador na extremidade remota ou "lado do servidor" da ligação). Como resultado, no Windows, pode desligar de uma PSSession num computador Windows remoto e voltar a ligá-la posteriormente a partir do mesmo computador ou de um computador Windows diferente.
Este tópico explica como criar, utilizar, obter e eliminar PSSessions. Para obter informações mais avançadas, veja about_PSSession_Details.
Nota: as PSSessions utilizam a infraestrutura remota do PowerShell. Para utilizar PSSessions, os computadores locais e remotos têm de ser configurados para comunicação remota. Para obter mais informações, veja about_Remote_Requirements.
No Windows Vista e versões posteriores do Windows, para criar uma PSSession num computador local, tem de iniciar o PowerShell com a opção "Executar como administrador".
O que é uma Sessão?
Uma sessão é um ambiente no qual o PowerShell é executado.
Sempre que iniciar o PowerShell, é criada uma sessão automaticamente e pode executar comandos na sessão. Também pode adicionar itens à sua sessão, como módulos e snap-ins, e pode criar itens, como variáveis, funções e aliases. Estes itens só existem na sessão e são eliminados quando a sessão termina.
Também pode criar sessões geridas pelo utilizador, conhecidas como "Sessões do PowerShell" ou "PSSessions", no computador local ou num computador remoto. Tal como na sessão predefinida, pode executar comandos numa PSSession e adicionar e criar itens. No entanto, ao contrário da sessão iniciada automaticamente, pode controlar as PSSessions que criar. Pode obter, criar, configurar e removê-los, desligar e voltar a ligar aos mesmos e executar vários comandos na mesma PSSession. A PSSession permanece disponível até que a elimine ou exceda o tempo limite.
Normalmente, cria uma PSSession para executar uma série de comandos relacionados num computador remoto. Quando cria uma PSSession num computador remoto, o PowerShell estabelece uma ligação persistente ao computador remoto para suportar a sessão.
Se utilizar o parâmetro ComputerName do Invoke-Command
cmdlet ou Enter-PSSession
para executar um comando remoto ou para iniciar uma sessão interativa, o PowerShell cria uma sessão temporária no computador remoto e fecha a sessão assim que o comando estiver concluído ou assim que a sessão interativa terminar. Não pode controlar estas sessões temporárias e não pode utilizá-las para mais do que um único comando ou uma única sessão interativa.
No PowerShell, a "sessão atual" é a sessão em que está a trabalhar. A "sessão atual" pode referir-se a qualquer sessão, incluindo uma sessão temporária ou uma PSSession.
Porquê Utilizar uma PSSession?
Utilize uma PSSession quando precisar de uma ligação persistente a um computador remoto. Com uma PSSession, pode executar uma série de comandos que partilham dados, como o valor das variáveis, o conteúdo de uma função ou a definição de um alias.
Pode executar comandos remotos sem criar uma PSSession. Utilize o parâmetro ComputerName de cmdlets com capacidade remota para executar um único comando ou uma série de comandos não relacionados num ou em muitos computadores.
Quando utiliza o parâmetro ComputerName de Invoke-Command
ou Enter-PSSession
, o PowerShell estabelece uma ligação temporária ao computador remoto e, em seguida, fecha a ligação assim que o comando estiver concluído. Todos os elementos de dados que criar serão perdidos quando a ligação for fechada.
Outros cmdlets que têm um parâmetro ComputerName , como Get-Eventlog
e Get-WmiObject
, utilizam diferentes tecnologias de comunicação remota para recolher dados. Nenhuma cria uma ligação persistente como uma PSSession.
Como Create uma PSSession
Para criar uma PSSession, utilize o New-PSSession
cmdlet . Para criar a PSSession num computador remoto, utilize o parâmetro ComputerName do New-PSSession
cmdlet .
Por exemplo, o comando seguinte cria uma nova PSSession no computador Server01.
New-PSSession -ComputerName Server01
Quando submete o comando, New-PSSession
cria a PSSession e devolve um objeto que representa a PSSession. Pode guardar o objeto numa variável quando criar a PSSession ou pode utilizar um Get-PSSession
comando para obter a PSSession mais tarde.
Por exemplo, o comando seguinte cria uma nova PSSession no computador Server01 e guarda o objeto resultante na variável $ps.
$ps = New-PSSession -ComputerName Server01
Como Create PSSessions em Vários Computadores
Para criar PSSessions em vários computadores, utilize o parâmetro ComputerName do New-PSSession
cmdlet . Escreva os nomes dos computadores remotos numa lista separada por vírgulas.
Por exemplo, para criar PSSessions nos computadores Server01, Server02 e Server03, escreva:
New-PSSession -ComputerName Server01, Server02, Server03
New-PSSession
cria uma PSSession em cada um dos computadores remotos.
Como Obter PSSessions
Para obter as PSSessions que foram criadas na sua sessão atual, utilize o Get-PSSession
cmdlet sem o parâmetro ComputerName . Get-PSSession
devolve o mesmo tipo de objeto que New-PSSession
devolve.
O comando seguinte obtém todas as PSSessions que foram criadas na sessão atual.
Get-PSSession
A apresentação predefinida das PSSessions mostra o respetivo ID e um nome a apresentar predefinido. Pode atribuir um nome a apresentar alternativo quando criar a sessão.
Id Name ComputerName State ConfigurationName
--- ---- ------------ ----- ---------------------
1 Session1 Server01 Opened Microsoft.PowerShell
2 Session2 Server02 Opened Microsoft.PowerShell
3 Session3 Server03 Opened Microsoft.PowerShell
Também pode guardar as PSSessions numa variável. O comando seguinte obtém as PSSessions e guarda-as na variável $ps 123.
$ps123 = Get-PSSession
Ao utilizar os cmdlets PSSession, pode fazer referência a uma PSSession pelo respetivo ID, pelo respetivo nome ou pelo respetivo ID de instância (um GUID). O comando seguinte obtém uma PSSession pelo respetivo ID e guarda-a na variável $ps 01.
$ps01 = Get-PSSession -Id 1
A partir do Windows PowerShell 3.0, as PSSessions são mantidas no computador remoto. Para obter PSSessions que criou em computadores remotos específicos, utilize o parâmetro ComputerName do Get-PSSession
cmdlet . O comando seguinte obtém as PSSessions que criou no computador remoto Server01. Isto inclui PSSessions criadas na sessão atual e noutras sessões no computador local ou noutros computadores.
Get-PSSession -ComputerName Server01
No Windows PowerShell 2.0, Get-PSSession
obtém apenas as PSSessions que foram criadas na sessão atual. Não obtém PSSessions que foram criadas noutras sessões ou noutros computadores, mesmo que as sessões estejam ligadas e estejam a executar comandos no computador local.
Como Executar Comandos numa PSSession
Para executar um comando numa ou mais PSSessions, utilize o Invoke-Command
cmdlet .
Utilize o parâmetro Sessão para especificar as PSSessions e o parâmetro ScriptBlock para especificar o comando.
Por exemplo, para executar um Get-ChildItem
comando ("dir") em cada uma das três PSSessions guardadas na variável $ps 123, escreva:
Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }
Como Eliminar PSSessions
Quando terminar de utilizar a PSSession, utilize o Remove-PSSession
cmdlet para eliminar a PSSession e libertar os recursos que estava a utilizar.
Remove-PSSession -Session $ps
ou
Remove-PSSession -Id 1
Para remover uma PSSession de um computador remoto, utilize o parâmetro ComputerName do Remove-PSSession
cmdlet .
Remove-PSSession -ComputerName Server01 -Id 1
Se não eliminar a PSSession, a PSSession permanecerá disponível para utilização até atingir o limite de tempo.
Também pode utilizar o parâmetro IdleTimeout do New-PSSessionOption
cmdlet para definir um tempo de expiração para uma PSSession inativa. Para obter mais informações, veja New-PSSessionOption.
Os Cmdlets PSSession
Para obter uma lista de cmdlets PSSession, escreva:
Get-Help *-PSSession
- Connect-PSSession: liga uma PSSession à sessão atual
- Disconnect-PSSession: Desliga uma PSSession da sessão atual
- Enter-PSSession: inicia uma sessão interativa
- Exit-PSSession: Termina uma sessão interativa
- Get-PSSession: Obtém as PSSessions na sessão atual
- New-PSSession: cria uma nova PSSession num computador local ou remoto
- Receive-PSSession: obtém os resultados dos comandos executados numa sessão desligada
- Remove-PSSession: elimina as PSSessions na sessão atual
Nota
As sessões desligadas só são suportadas no Windows. Os Connect-PSSession
cmdlets , Disconnect-PSSession
e Receive-PSSession
só estão disponíveis no Windows. Para obter mais informações sobre sessões desligadas, consulte about_Remote_Disconnected_Session
Para Mais Informações
Para obter mais informações sobre PSSessions, veja about_PSSession_Details.