Usar o Windows PowerShell para administrar um servidor remotamente
A equipe de administração de TI da Contoso está cada vez mais concentrada em executar tarefas administrativas remotamente em relação ao objeto sendo gerenciado. Uma área de grande interesse é a capacidade de aproveitar o Windows PowerShell para administrar e gerenciar remotamente a infraestrutura de TI da Contoso. É possível usar a comunicação remota do Windows PowerShell para isso.
Requisitos da comunicação remota
A comunicação remota requer que você tenha o Windows PowerShell em seu computador local, além de ter o Gerenciamento Remoto do Windows habilitado em todos os computadores remotos aos quais você deseja se conectar. Você também deve habilitar a comunicação remota do Windows PowerShell.
Observação
A comunicação remota do Windows PowerShell é habilitada por padrão no Windows Server, mas você precisa habilitá-la no Windows 10.
Para habilitar a comunicação remota do Windows PowerShell, use um dos procedimentos a seguir. Em um prompt de comandos com privilégios elevados [ou no prompt do Windows PowerShell (administrador)], execute o seguinte comando:
Winrm quickconfig
Como alternativa, você pode usar o seguinte cmdlet do Windows PowerShell para habilitar a comunicação remota:
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.
Observação
Os aplicativos que usam o Gerenciamento Remoto do Windows, como o Windows PowerShell, também podem aplicar sua própria criptografia aos dados que são passados para o serviço Gerenciamento Remoto do Windows.
Todos os arquivos e outros recursos que sejam necessários para executar um comando específico devem estar no computador remoto, pois 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, e não para o 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
Cuidado
Ao habilitar a comunicação remota em computadores com uma NIC (placa de interface de rede) atribuída ao perfil de local de rede pública, é gerado 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 NIC pública.
Executar cmdlets em computadores remotos
Vários cmdlets têm um parâmetro ComputerName que permite que recuperar objetos de computadores remotos. Esses cmdlets não usam a comunicação remota do Windows PowerShell para se comunicar, assim, você pode usar o parâmetro ComputerName nesses cmdlets em qualquer computador que execute o Windows PowerShell. Você não precisa configurar os computadores para a comunicação remota do Windows PowerShell, nem atender aos requisitos de sistema da comunicação remota.
A tabela a seguir apresenta 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 |
Determina se o parâmetro ComputerName requer comunicação remota do Windows PowerShell. |
Processar comandos remotos
Ao se conectar a um computador remoto e enviar um comando remoto a ele, o comando é transmitido pela rede para uma instância do Windows PowerShell no computador remoto, sendo executado nele em seguida. Os resultados do comando são enviados de volta ao computador local e exibidos na sessão do Windows PowerShell dele.
Todas as entradas locais de um comando remoto são coletadas antes que qualquer uma delas seja enviada ao computador remoto. No entanto, a saída é retornada ao computador local à medida que é gerada. Ao se conectar a um computador remoto, o sistema usa as credenciais de nome de usuário e senha no computador local para autenticar você no computador remoto.
Observação
Por padrão, é usado o protocolo de autenticação Kerberos versão 5 (V5) para executar a autorização e a autenticação. Portanto, é necessário um domínio AD DS.
Dica
Em situações em que o computador remoto não esteja em um domínio ou esteja em um domínio não confiável, você pode permitir a conexão de um computador cliente definindo os computadores remotos como hosts confiáveis.
Os cmdlets a seguir oferecem suporte à comunicação remota.
Invoke-Command
Enter-PSSession
Exit-PSSession
Disconnect-PSSession
Receive-PSSession
Connect-PSSession
Dica
Você pode criar guias remotas usando o ISE do Windows PowerShell. Para executar essa tarefa, use a opção de guia Novo PowerShell remoto no menu Arquivo, no ISE do Windows PowerShell.
Ao implementar a comunicação remota, você pode tanto se conectar aos computadores remotos usando uma sessão temporária quanto criar uma sessão persistente.
Criar uma sessão temporária
Para uma sessão temporária, você deve iniciar a sessão, executar os comandos e encerrar a sessão. Esse é um método eficiente para executar um ou vários comandos não relacionados, mesmo em um grande número de computadores remotos.
Observação
Variáveis ou funções definidas nos comandos deixarão de estar disponíveis depois que você fechar a conexão.
Para criar uma conexão temporária, use o cmdlet Invoke-Command
com o parâmetro Invoke-Command
para especificar os computadores remotos. Em seguida, use o parâmetro –ScriptBlock para especificar o comando. Por exemplo, o seguinte comando executa 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 cmdlet New-PSSession
. Por exemplo, o comando a seguir cria uma sessão em um computador remoto e a salva na variável $s:
$s = New-PSSession –ComputerName SEA-DC1
Use o cmdlet Enter-PSSession
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 inserir uma sessão, o prompt de comando do Windows PowerShell no computador local será alterado para indicar a conexão.
A sessão interativa permanecerá aberta até você fechá-la. 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
O cmdlet Invoke-Command
aceita vários nomes de computador para sessões temporárias. 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 cmdlet Invoke-Command
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, depois executam um comando Get-Culture
em cada sessão do Windows PowerShell:
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
Dica
Para incluir o computador local na lista de computadores, digite o nome dele, um ponto final (.) 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 ao computador local. Ao usar 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:
Inicialize um prompt do PowerShell elevado.
Execute o seguinte comando para criar uma sessão de comunicação remota do PowerShell:
Enter-PSSession -ComputerName SEA-DC1
Use cmdlets padrão do Windows PowerShell para recuperar informações sobre o servidor, como nome e endereço IP.
Verifique o status do serviço IIS e reinicie esse serviço usando o seguinte comando:
Get-Service -Name IISAdmin | Restart-Service