PsExec é um programa utilitário de linha de comando para Windows escrito pelo próprio Mark Russinovich, atual CTO da Microsoft Azure. Ainda está sendo atualizado como parte do conjunto de utilitários SysInternals.
PsExec permite que você execute programas localmente e, mais importante, em computadores remotos. Você até pode iniciar comandos semelhantes em vários servidores ao mesmo tempo! Vou te mostrar como fazer isso e muito mais neste artigo.
PsExec certamente tem o privilégio de estar no ‘top 10 de utilitários’ de qualquer profissional de TI. Recentemente, atualizei minha postagem ‘O Guia Completo para Robocopy‘ – PsExec é como o Robocopy em termos de seu imenso poder e flexibilidade.
Como instalar o PsExec
O único requisito fundamental no seu computador local é estar executando uma versão moderna e suportada do Windows. O PsExec até rodará no Windows XP, mas sabemos que não é uma boa ideia, não é mesmo?
Há mais alguns pontos a serem observados ao executar comandos em computadores remotos. Chegarei a esses pontos em breve.
A forma mais comum de instalar o PsExec é baixá-lo do site Sysinternals e instalá-lo. Para facilitar, aqui está um link direto para o arquivo PsTools.zip.
Configurando computadores remotos
Para que os computadores remotos aceitem seus comandos PsExec, é necessário garantir dois itens – ‘Compartilhamento de Arquivos e Impressoras’ e o compartilhamento ‘admin$’.
O compartilhamento de arquivos e impressoras usa a porta TCP 445. Você pode verificar se ela está aberta usando o painel de controle do Firewall do Windows no computador remoto e garantir que esteja habilitada para a categoria de rede apropriada que você está usando. Como estou usando meu ambiente de laboratório Hyper-V do Active Directory do Windows Server 2022, só preciso garantir que esteja habilitado para o perfil de Domínio.

Também é necessário verificar se o compartilhamento administrativo ‘admin$’ está habilitado e acessível. Uma maneira rápida e fácil de validar isso é abrir o Explorador de Arquivos, clicar na barra de endereços e digitar \\nomeservidor\admin$
Pressione Enter e ele deve abrir. Se você receber um erro, precisará abrir o Gerenciamento do Computador no computador remoto, expandir Compartilhamento de Arquivos e clicar em Compartilhamentos. Verifique se você vê o compartilhamento ‘ADMIN$’ listado.

Considerações de segurança
Sempre há considerações relacionadas à segurança quando você vai acessar um computador remotamente. O mais importante para o PsExec é provavelmente a configuração Compartilhamento de Arquivos e Impressoras. Certifique-se de verificar qual perfil de firewall você está usando. Em seguida, valide se apenas esse perfil tem o Compartilhamento de Arquivos e Impressoras habilitado.
Dica Útil: Executar este comando PowerShell da minha estação de trabalho Windows 11 no meu domínio verifica ou habilita a regra de firewall ‘Compartilhamento de Arquivos e Impressoras’ no perfil ‘Domínio’ nos meus quatro controladores de domínio. Com certeza é melhor do que fazer login em cada um!
Invoke-Command -ComputerName ws16-dc1, ws16-dc2, ws19-dc3, ws22-dc4 -ScriptBlock { Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Domain }
Funciona perfeitamente!
Entendendo a sintaxe do PsExec
Depois de extrair a utilidade PsExec, você pode simplesmente executá-la a partir de um prompt de comando ou janela do Terminal. Na primeira vez, você será solicitado a aceitar o EULA. Clique em Aceitar. Ou execute o comando com o switch /accepteula e está tudo certo.
A sintaxe básica é:
psexec(64) -switches computer command
Se você omitir o ‘computador’, ele será executado localmente.
Opções de Comando
Aqui está uma tabela completa que mostra todos os switches de comando e argumentos possíveis ao executar o PsExec.
Parameter | Description |
---|---|
-a | Separate processors on which the application can run with commas where 1 is the lowest numbered CPU. For example, to run the application on CPU 2 and CPU 4, enter: “-a 2,4” |
-c | Copy the specified executable to the remote system for execution. If you omit this option the application must be in the system path on the remote system. |
-d | Don’t wait for process to terminate (non-interactive). |
-e | Does not load the specified account’s profile. |
-f | Copy the specified program even if the file already exists on the remote system. |
-i | Run the program so that it interacts with the desktop of the specified session on the remote system. If no session is specified the process runs in the console session. This flag is required when attempting to run console applications interactively (with redirected standard IO). |
-h | If the target system is Vista or higher, has the process run with the account’s elevated token, if available. |
-l | Run process as limited user (strips the Administrators group and allows only privileges assigned to the Users group). On Windows Vista the process runs with Low Integrity. |
-n | Specifies timeout in seconds connecting to remote computers. |
-p | Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password. |
-r | Specifies the name of the remote service to create or interact with. |
-s | Run the remote process in the System account. |
-u | Specifies optional user name for login to remote computer. |
-v | Copy the specified file only if it has a higher version number or is newer on than the one on the remote system. |
-w | Set the working directory of the process (relative to remote computer). |
-x | Display the UI on the Winlogon secure desktop (local system only). |
-priority | Specifies -low, -belownormal, -abovenormal, -high or -realtime to run the process at a different priority. Use -background to run at low memory and I/O priority on Vista. |
computer | Direct PsExec to run the application on the remote computer or computers specified. If you omit the computer name, PsExec runs the application on the local system, and if you specify a wildcard (\\*), PsExec runs the command on all computers in the current domain. |
@file | PsExec will execute the command on each of the computers listed in the file. |
cmd | Name of application to execute. |
arguments | Arguments to pass (note that file paths must be absolute paths on the target system). |
-accepteula | This flag suppresses the display of the license dialog. |
Não existem códigos de erro específicos para o PsExec. Quaisquer códigos de saída ou erro que você veja serão dos comandos que você executa remotamente no(s) outro(s) computador(es).
Como usar o PsExec para executar comandos em um PC local
Embora a habilidade e reputação do PsExec derivem da execução de comandos em sistemas remotos, você pode executar comandos localmente se desejar. Se você não incluir o switch ‘computer’, o PsExec executará o comando em seu sistema local. Aqui está um exemplo.
psexec -s cmd whoami hostname

Como você pode ver, uma nova sessão de cmd.exe é iniciada usando o switch ‘-s’, que a abre usando a conta SYSTEM local. Em seguida, a saída dos comandos ‘whoami’ e ‘hostname’ é retornada. Sim, eu sei, bem básico.
Como usar o PsExec para executar comandos em um único computador remoto
Conforme avançamos, começamos a nos aprofundar na execução de comandos remotamente, poupando bastante tempo. Vamos tentar executar alguns comandos remotamente a partir de nossa estação de trabalho com Windows 11 para meus controladores de domínio.
psexec \\ws19-dc3 hostname

Embora isso ainda seja bastante simplista, pode ser muito útil ao configurar novos servidores ou solucionar alguns problemas de TCP/IP ou Active Directory.
Como usar o PsExec para executar comandos em vários computadores remotos
Agora, vamos acelerar! Vou apresentar a vocês o verdadeiro poder do lado negro… espera, estou sempre confundindo esses dois. Deixe-me começar de novo.
A robustez e eficiência do PsExec realmente se destacam quando começamos a executar vários comandos em vários computadores remotos.
Usando nomes de computadores separados por vírgulas
O primeiro e mais direto método é usar nomes de computadores separados por vírgulas. Você provavelmente notou uma variação disso no início do meu post. Vamos executar o comando hostname em todos os quatro dos meus controladores de domínio.
psexec \\ws16-dc1,ws16-dc2,ws19-dc4,ws22-dc4 ipconfig

Agora, ISSO é útil! Uma maneira fácil de obter o endereço IP de cada computador. E isso é apenas o que me veio à cabeça. Muitos profissionais de TI provavelmente podem pensar em muitos exemplos de executar comandos na linha de comando em muitos computadores, o que leva tempo… não mais!
Usando um arquivo de texto contendo vários nomes de computadores
Você também tem a opção de usar um arquivo de texto contendo nomes de computador como entrada para computadores remotos. Eu criei um arquivo computers.txt e adicionei os 4 nomes de host DC, um em cada linha. Agora posso usar este comando para realizar a mesma tarefa.
psexec @computers.txt whoami

Dica útil: Precisa reunir rapidamente uma lista de todos os nomes de host de objetos de computador de seu domínio? Aqui está um comando PowerShell que você pode executar usando Get-AdComputer.
(Get-AdComputer -Filter *).Name | Out-File computers.txt
Excelente!
Usando um caractere curinga para executar um processo em todos os computadores em um domínio
Agora aqui está uma opção poderosa que você tem com PsExec: Usando um caractere curinga para executar um comando em todos os computadores em um domínio.
Vale ressaltar que há alguma preparação necessária antes de executar isso. Você precisa verificar se seus pré-requisitos remotos estão em vigor. Você também precisa conhecer as ramificações. Você provavelmente não vai executar ‘format c:’ em todos os computadores do seu domínio. Eu sei, eu sei, mas um planejamento cuidadoso é aconselhável.
Obviamente, executar ‘ipconfig /flushdns’ pode ser extremamente útil para rapidamente cobrir seu domínio com uma atualização de DNS de LAN DNS!
psexec \\* ipconfig /flushdns
Exemplos de comando PsExec
Aqui, vamos descobrir mais opções intermediárias e avançadas que você tem com o PsExec em termos de realizar tarefas mais robustas em computadores remotos. Eu garanto que você encontrará várias dessas úteis em suas tarefas diárias como um profissional de TI ou engenheiro de sistemas!
Executando um comando remoto
A great example of running a remote command is starting CMD, the command prompt on the remote computer.
psexec \\ws19-dc3 cmd

Isso é realmente muito legal e muito útil. Quantas vezes você já RDP’ed (fez uma conexão de Desktop Remoto) para um servidor para executar um prompt de comando? Eu sei, todos os dias. Isso é muito eficiente.
Lembre-se de digitar ‘exit‘ para encerrar a sessão. Se você não fizer isso, essa sessão continuará a ser executada no servidor remoto até que você reinicie-o.
Abrindo aplicativos GUI remotamente
Você também tem a opção de iniciar aplicativos GUI no ‘Console’ do computador remoto. Você pode usar o switch ‘-i’ para esse propósito.
psexec -i \\ws16-dc2 notepad

I didn’t have much luck. The Notepad window started on WS16-DC2, but the window was black with a funny grey title bar.
No entanto, não havia nada que eu pudesse fazer senão clicar no canto superior direito da janela e clicar no invisível ‘X’ para fechar o programa. A janela fechou e então minha sessão PsExec saiu normalmente. Se alguém tiver algum comentário ou dica sobre o que eu possa estar fazendo errado, por favor, deixe-me um comentário abaixo, obrigado!
Habilitando o PowerShell Remoting
Talvez você prefira usar o PowerShell Remoting para lidar com suas tarefas de acesso remoto. Não se preocupe, o PsExec está aqui. Você pode usar o PsExec para iniciar o comando ‘winrm quickconfig’ e habilitar seu acesso.
psexec \\ws16-dc2 -s c:\windows\system32\winrm.cmd quickconfig -quiet

Incrível! Isso também é algo que faço ao criar um novo servidor para poder gerenciá-lo remotamente. Se você estiver criando vinte ou cem novos servidores de uma vez, esta é uma ferramenta útil.
Instalando ou copiando um programa para um computador remoto
Que tal usar o PsExec como uma ferramenta simples de implantação de software? Bem, você está com sorte. Isso provavelmente não é a característica mais legal, mas, se seus usuários tiverem menos conhecimento em informática, isso pode ajudar bastante.
Aqui está um comando que você poderia usar para copiar o arquivo de instalação do Teams para o computador remoto usando a conta SYSTEM. Em seguida, ele executará o msiexec.exe para iniciar a instalação.
psexec \\ws19-dc3 -i -s "msiexec.exe /i Teams64.msi" -c Teams64.msi
A única coisa que o usuário no computador remoto precisa fazer é clicar em Avançar, Avançar e Concluir!
Erros comuns do PsExec
Um tópico final a ser abordado, e não se preocupe, é pequeno. Os códigos de erro e de saída, mais uma vez, serão quase que exclusivamente reportados pelo comando remoto no outro computador, não pelo PsExec em si.
No entanto, ter uma pequena lista dos códigos mais comuns no Windows certamente ajuda.
ERROR CODE | EXPLANATION |
---|---|
-2146232576 | Typically returned by Windows Update when an error occurs. |
0 | Command executed successfully |
1 | Incorrect function. A problem happened. That’s about it. |
1603 | Fatal error during installation. This typically is returned by msiexec. |
2 | The system cannot find the file specified |
4 | The system cannot open the file. |
5 | Access is denied. |
6 | The handle is invalid. |
6118 | The list of servers for this workgroup is not currently available |
Utilizando o PsExec em sua Rede de Área Ampliada (WAN)
À medida que nosso novo mundo “híbrido” continua a se desdobrar, você certamente estará apoiando usuários remotos em muitas redes diferentes. Quando você precisa acessar computadores remotos e eles não fazem parte do seu LAN (mesmo sub-rede), ainda é possível usar o PsExec.
No entanto, você só precisa ter certeza de que especifica o FQDN (Nome de Domínio Totalmente Qualificado) do computador e inclui as credenciais de usuário e senha de um usuário local, a menos que eles estejam em uma VPN e sua máquina esteja integrada ao domínio AD.
Aqui está um exemplo:
psexec \\labmachine03.contoso.com -u userlogin cmd.exe
Desde que firewalls apropriados estejam configurados para permitir a porta 445 para o computador, você estará bem. Você será solicitado a inserir a senha para ‘userlogin’ quando executar o comando.
Conclusão
I don’t know about you, but I am really excited to learn more in-depth knowledge of these very useful utilities, commands, and programs for IT Pros. PsExec is no exception. It has long been the gold standard for efficient remote access.
No entanto, os tempos estão mudando. O PowerShell existe há muitos anos e certamente é muito robusto nessa área. Além disso, a Microsoft fez um trabalho fantástico ao escrever novas aplicações de GUI para gerenciamento remoto de computadores/servidores, nomeadamente o Windows Admin Center e o Server Manager, integrados ao Windows Server.
Obrigado por ler!
Source:
https://petri.com/psexec/