Usar o Windows PowerShell para administrar remotamente um servidor
- 7 minutos
A equipe de administração de TI da Contoso está cada vez mais focada em executar tarefas administrativas remotamente a partir do objeto que está gerenciando. Uma área de particular interesse é a capacidade de aproveitar o Windows PowerShell para administrar e gerenciar remotamente a infraestrutura de TI da Contoso. Você pode usar a comunicação remota do Windows PowerShell para conseguir isso.
Requisitos para a comunicação remota
A comunicação remota requer que você tenha o Windows PowerShell em seu computador local e o Gerenciamento Remoto do Windows habilitado em qualquer computador remoto ao qual você queira se conectar. Você também deve habilitar a comunicação remota do Windows PowerShell.
Nota
A comunicação remota do Windows PowerShell é habilitada por padrão no Windows Server, mas você deve habilitá-la no Windows 10 e no Windows 11.
Para habilitar a comunicação remota do Windows PowerShell, use um dos procedimentos a seguir. Em um prompt de comando elevado (ou prompt do Windows PowerShell (Admin)), execute o seguinte comando:
Winrm quickconfig
Como alternativa, para habilitar a comunicação remota, você pode usar o seguinte cmdlet do Windows PowerShell:
Enable-PSremoting -force
Importante
O Gerenciamento Remoto do Windows se comunica via HTTP. Por padrão, o Gerenciamento Remoto do Windows e a comunicação remota do Windows PowerShell usam a porta TCP 5985 para conexões não criptografadas de entrada e a porta TCP 5986 para conexões criptografadas de entrada.
Nota
Os aplicativos que usam o Gerenciamento Remoto do Windows, como o Windows PowerShell, também podem aplicar sua própria criptografia aos dados passados para o serviço de Gerenciamento Remoto do Windows.
Todos os arquivos e outros recursos necessários para executar um comando específico devem estar no computador remoto porque os comandos de comunicação remota não copiam nenhum recurso. No entanto, você pode executar scripts locais. Isso ocorre porque o conteúdo do script é enviado para o computador remoto, em vez do arquivo de script em si.
Para executar a administração remota, os administradores devem ter permissão para:
- Conectar-se ao computador remoto
- Executar o Windows PowerShell
- Acessar armazenamentos de dados e o registro no computador remoto
Atenção
Habilitar a comunicação remota em computadores com uma placa de interface de rede (NIC) atribuída ao perfil de local de rede pública gera um erro. Você pode usar Enable-PSremoting -force para ignorar essa restrição e forçar a comunicação remota em um dispositivo com uma placa de rede pública.
Executar cmdlets em computadores remotos
Vários cmdlets têm um parâmetro ComputerName que permite recuperar objetos de computadores remotos. Esses cmdlets não usam a comunicação remota do Windows PowerShell para se comunicar, portanto, você pode usar o parâmetro ComputerName nesses cmdlets em qualquer computador que execute o Windows PowerShell. Não é necessário configurar os computadores para comunicação remota do Windows PowerShell ou atender aos requisitos do sistema para comunicação remota.
A tabela a seguir fornece mais informações sobre o parâmetro ComputerName.
| Comando | Descrição |
|---|---|
Get-Command –ParameterName ComputerName |
Localiza cmdlets que usam o parâmetro ComputerName. |
Get-Help <cmdlet-name> -parameter ComputerName |
Determine se o parâmetro ComputerName requer comunicação remota do Windows PowerShell. |
Processamento de comandos remotos
Quando você se conecta a um computador remoto e envia um comando remoto, o comando é transmitido pela rede para uma instância do Windows PowerShell no computador remoto e, em seguida, executado nele. Os resultados do comando são enviados de volta ao computador local e exibidos na sessão do Windows PowerShell no computador local.
Toda a entrada local para um comando remoto é coletada antes de qualquer um deles ser enviado para o computador remoto. No entanto, a saída é devolvida ao computador local à medida que é gerada. Quando você se conecta a um computador remoto, o sistema usa as credenciais de nome de usuário e senha no computador local para autenticá-lo no computador remoto.
Nota
Por padrão, o protocolo de autenticação Kerberos versão 5 (V5) é usado para executar a autorização e a autenticação. Portanto, um domínio AD DS é necessário.
Gorjeta
Em situações em que o computador remoto não está em um domínio ou está em um domínio não confiável, você pode permitir que um computador cliente se conecte definindo os computadores remotos como hosts confiáveis.
Os cmdlets a seguir oferecem suporte à comunicação remota.
Invoke-CommandEnter-PSSessionExit-PSSessionDisconnect-PSSessionReceive-PSSessionConnect-PSSession
Gorjeta
Você pode criar guias remotas usando o Windows PowerShell ISE. Para executar essa tarefa, use a opção de guia Novo PowerShell Remoto no menu Arquivo no Windows PowerShell ISE.
Ao implementar a comunicação remota, você pode se conectar às máquinas remotas usando uma sessão temporária ou pode criar uma sessão persistente.
Criar uma sessão temporária
Para uma sessão temporária, inicie a sessão, execute os comandos e, em seguida, termine a sessão. Este é um método eficiente para executar um único comando ou vários comandos não relacionados, mesmo em um grande número de computadores remotos.
Nota
As variáveis ou funções definidas nos comandos deixam de estar disponíveis depois de fechar a ligação.
Para criar uma conexão temporária, use o Invoke-Command cmdlet com o parâmetro –ComputerName para especificar os computadores remotos. Em seguida, use o parâmetro –ScriptBlock para especificar o comando. Por exemplo, o seguinte comando é executado Get-EventLog no computador SEA-DC1:
Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}
Criar uma sessão persistente
Para criar uma conexão persistente com outro computador, use o New-PSSession cmdlet. Por exemplo, o comando a seguir cria uma sessão em um computador remoto e salva a sessão na variável $s:
$s = New-PSSession –ComputerName SEA-DC1
Use o Enter-PSSession cmdlet para se conectar e iniciar uma sessão interativa. Por exemplo, depois de abrir uma nova sessão no SEA-DC1, o seguinte comando inicia uma sessão interativa com o computador:
Enter-PSSession $s
Depois de entrar em uma sessão, o prompt de comando do Windows PowerShell no computador local é alterado para indicar a conexão.
A sessão interativa permanece aberta até ser fechada. Isso permite que você execute quantos comandos forem necessários. Para encerrar a sessão interativa, digite o seguinte comando:
Exit-PSSession
Executar comandos remotos em vários computadores
Para sessões temporárias, o cmdlet aceita vários nomes de Invoke-Command computador. Para conexões persistentes, o parâmetro Session aceita várias sessões do Windows PowerShell. Para executar um comando remoto em vários computadores, inclua todos os nomes de computador no parâmetro ComputerName com o Invoke-Command cmdlet e separe os nomes com vírgulas, conforme demonstrado no exemplo a seguir:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}
Para sessões persistentes, você também pode executar um comando em várias sessões do Windows PowerShell. Os comandos a seguir criam sessões do Windows PowerShell em SEA-DC1, SEA-SVR1 e SEA-SVR2 e executam um Get-Culture comando em cada sessão do Windows PowerShell:
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
Gorjeta
Para incluir o computador local na lista de computadores, digite o nome do computador local ou um ponto (.) ou localhost.
Como executar um script em computadores remotos
Para executar um script local em computadores remotos, use o parâmetro FilePath com Invoke-Command. O comando a seguir executa o script Sample.ps1 nos computadores SEA-DC1 e SEA-SVR1:
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1
Os resultados do script são retornados para o computador local. Usando o parâmetro FilePath , você não precisa copiar nenhum arquivo para os computadores remotos.
Demonstração
O vídeo a seguir demonstra como gerenciar um Windows Server remoto usando o Windows PowerShell. As principais etapas do processo são:
Inicie um prompt do PowerShell com privilégios elevados.
Crie uma sessão remota do PowerShell executando o seguinte comando:
Enter-PSSession -ComputerName SEA-DC1Recupere informações sobre o servidor, como nome e endereço IP, usando cmdlets padrão do Windows PowerShell.
Verifique o status do serviço IIS e reinicie esse serviço usando o seguinte comando:
Get-Service -Name IISAdmin | Restart-Service