Suponha que você tenha aprendido a executar comandos localmente; isso já é um passo importante para dominar a execução remota. O PowerShell Remoting permite que administradores executem comandos e scripts em sistemas remotos.
Este guia demonstra como configurar e usar o PowerShell Remoting em um ambiente Active Directory (AD). Imagine criar arquivos, executar scripts ou verificar configurações remotamente sem sair da sua mesa.
Configure e use o PowerShell Remoting para executar scripts em sistemas remotos com confiança!
Configurando o PowerShell Remoting para um Usuário Padrão
Antes de aproveitar ao máximo o PowerShell Remoting, você deve garantir que as permissões necessárias estão em vigor. Executar comandos ou scripts remotamente depende da configuração adequada, especialmente em ambientes Active Directory onde a segurança é uma prioridade.
Comece tentando se conectar a um servidor remoto (SRV2
) usando Invoke-Command
. O seguinte comando executa um bloco de script no computador remoto:
Invoke-Command -ComputerName SRV2 -ScriptBlock {Write-Host "Hi, I'm running code on the $(hostname) remote computer!"}
Se a autenticação falhar, isso geralmente significa que o usuário não possui as permissões necessárias.
Por padrão, usuários não administrativos devem ser membros do grupo Remote Management Users do computador remoto.
Verifique a filiação ao grupo:
Get-LocalGroupMember -Group 'Remote Management Users'
Se o usuário não estiver listado, adicione-o:
Add-LocalGroupMember -Group 'Remote Management Users' -Member user Get-LocalGroupMember -Group 'Remote Management Users'
Agora, tente novamente o comando Invoke-Command
para confirmar a conectividade.
Invoke-Command -ComputerName SRV2 -ScriptBlock {Write-Host "Hi, I'm running code on the $(hostname) remote computer!"}
Executando um Script Básico Remotamente
Uma vez configurado o PowerShell Remoting, você pode executar comandos no computador remoto. Essa capacidade desbloqueia o potencial para automatizar tarefas, coletar dados e solucionar problemas remotamente.
Para ver como o PowerShell remoting funciona, crie um arquivo de texto na máquina remota e depois verifique se a ação foi bem-sucedida.
Defina e execute o scriptblock:
$scriptblock = { Set-Content -Path 'somefile.txt' -Value '' } Invoke-Command -Scriptblock $scriptblock -ComputerName SRV2
Verifique se o arquivo foi criado com o seguinte comando:
Este comando conecta ao computador remoto SRV2
, obtém informações sobre o arquivo somefile.txt
e exibe apenas o nome e horário de criação.
icm -ComputerName SRV2 -ScriptBlock {Get-Item somefile.txt} | Select-Object Name, CreationTime
Executando Scripts Locais em Computadores Remotos
Talvez um único comando não seja suficiente e você precise executar um script completo armazenado localmente em sua máquina. Se for o caso, o PowerShell Remoting permite enviar rapidamente um script local para um computador remoto e executá-lo como se estivesse fisicamente presente.
Para demonstrar a execução de scripts em um computador remoto, crie um script curto localmente e execute-o em uma máquina remota para automatizar ações ou tarefas de limpeza.
Crie um script localmente com este comando onde:
$scriptContents
armazena o script em uma string de várias linhas usando uma aqui-string (@' ... '@
), que é útil para manter o script legível e organizado.Set-Content
escreve o conteúdo de$scriptContents
em um arquivo chamado*RunThisRemotely.ps1*
no diretório atual.
$scriptContents = @' Write-Host "Deleting the file just created..." Remove-Item -Path somefile.txt '@ Set-Content -Path 'RunThisRemotely.ps1' -Value $scriptContents
Confirme o conteúdo do script:
Get-Content RunThisRemotely.ps1
Execute o script remotamente:
Invoke-Command -ComputerName SRV2 -FilePath RunThisRemotely.ps1
Agora, verifique se o arquivo de teste foi excluído:
icm -ComputerName SRV2 -ScriptBlock {Test-Path somefile.txt}
Verificando Chaves do Registro Local com um Bloco de Script
O PowerShell Remoting suporta a passagem de variáveis entre sessões locais e remotas, permitindo scripts flexíveis e reutilizáveis. Mas para começar, vamos nos concentrar em verificar chaves do registro localmente.
Armazene vários caminhos do registro que podem ser verificados mais tarde para ver se existem no sistema:
# Define an array of registry paths to check $registryKeyPaths = @( 'HKLM:\SOFTWARE\Microsoft\AppV\', 'HKLM:\SOFTWARE\Microsoft\AccountsControl\' )
Adicione isso ao script para definir um bloco de script ****($localScriptBlock
) que é executado localmente no computador. O bloco de script verifica se caminhos específicos do registro existem na máquina local e fornece feedback para cada caminho.
# Define the script block that will run locally on the computer $localScriptBlock = { ## Iterate through each registry path in the $registryKeyPaths array foreach ($path in $registryKeyPaths) { # Check if the current registry path exists on the local machine if (Test-Path -Path $path) { # If the path exists, output a message confirming its existence Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { # If the path does not exist, output a message stating its absence Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
Execute o bloco de script e veja o que acontece.
Invoke-Command -ScriptBlock $localScriptBlock
Passando Variáveis Locais para Sessões Remotas
Seja trabalhando com arrays, strings ou objetos, você pode passar dados para comandos remotos de duas maneiras:
$using
– Integra variáveis locais diretamente no bloco de script.ArgumentList
– Passa explicitamente variáveis para o bloco para uso.
Continue lendo para explorar os dois métodos ($using
ou ArgumentList
) para alcançar esse objetivo.
Usando a Palavra-chave $using
(Abordagem Preferida)
Depois de confirmar que as chaves do registro existem, o próximo passo é ler esse array localmente e usá-lo no script em um computador remoto. Uma maneira de conseguir isso é usando a palavra-chave $using
para referenciar variáveis locais em sessões remotas.
Crie este script para ser executado no computador remoto e verificar os caminhos do registro especificados. Este script fornece feedback sobre se cada caminho existe ou não.
Com essa abordagem, basta adicionar o prefixo $using
a uma variável local. Essa ação diz ao PowerShell para referenciar a variável local registryKeyPaths
antes de executar o código no computador remoto.
$remoteScriptBlock = { ## Check to see if the registry keys exist on the computer foreach ($path in $using:registryKeyPaths) { if (Test-Path -Path $path) { Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
Em seguida, você pode invocar o comando remoto para executar o código na máquina remota:
Invoke-Command -ScriptBlock $remoteScriptBlock -ComputerName SRV2
Parece que as chaves do registro também existem lá.
Usando o Parâmetro ArgumentList
Além da palavra-chave $using
, outra opção é o parâmetro ArgumentList
para enviar variáveis para a sessão remota.
Crie um script (semelhante a um com a palavra-chave $using
) que usa o array $args
para acessar os valores passados via o parâmetro ArgumentList
.
Neste método, você especifica uma ou mais variáveis a serem enviadas para a sessão remota através do parâmetro ArgumentList
. Dentro do bloco de script, substitua a variável local por $args
, que o PowerShell preencherá automaticamente com os valores passados através de ArgumentList
.
$remoteScriptBlock = { ## Check to see if the registry keys exist on the computer foreach ($path in $args) { if (Test-Path -Path $path) { Write-Host -Object "The registry path [$path] exists on the computer $(hostname)." } else { Write-Host -Object "The registry path [$path] does not exist on the computer $(hostname)." } } }
Agora, execute o script com o seguinte comando:
Invoke-Command -ScriptBlock $remoteScriptBlock -ComputerName SRV2 -ArgumentList $registryKeyPaths
Ambos os métodos produzirão a mesma saída, confirmando que as chaves de registro existem no computador remoto.
Seguindo estes passos, você pode configurar e utilizar efetivamente o PowerShell Remoting para executar comandos e scripts em sistemas remotos.
Conclusão
Neste tutorial, você aprendeu como configurar o PowerShell Remoting em um ambiente do Active Directory, executar comandos e scripts em sistemas remotos e passar variáveis de forma eficaz. Essas habilidades fundamentais são essenciais para automatizar tarefas administrativas e gerenciar sistemas de maneira eficiente.
Agora que você cobriu o básico, considere explorar tópicos mais avançados. Pesquise sobre sessões persistentes do PowerShell, tratamento de erros remotos ou criação de scripts reutilizáveis para lidar com operações em massa.
As possibilidades com o PowerShell Remoting são infinitas—então comece a experimentar e torne seus fluxos de trabalho mais eficientes!
Source:
https://adamtheautomator.com/powershell-remoting-guide/