Se houvesse um utilitário de linha de comando que pudesse competir com o robocopy em termos de utilidade, seria o PsExec. A utilidade PsExec da Sysinternals é tão onipresente quanto possível no arsenal de um administrador de TI. Essa ferramenta permite que os administradores executem comandos remotamente, como se estivessem no computador local.
Para cobrir a ferramenta PsExec em profundidade, era apropriado abordar essa ferramenta cobiçada em um Guia Definitivo ATA. Neste guia, você aprenderá o que é o psexec, do que ele é capaz e muitos exemplos de como usar essa ferramenta útil.
O que é o PsExec.exe?
Se você é novo em TI ou talvez não tenha tido a necessidade de executar comandos e ferramentas em computadores remotos, pode não saber o que é o psexec.
PsExec ou psexec.exe é um utilitário de linha de comando construído para o Windows. Ele permite que os administradores executem programas em computadores locais e, mais comumente, em computadores remotos. É um utilitário gratuito parte do conjunto de ferramentas Sysinternals pstools criado por Mark Russinovich muitos anos atrás.
Foi criado para substituir ferramentas como o telnet, que o obrigavam a abrir portas e introduzir vulnerabilidades de segurança. Hoje em dia, temos outras opções como o PowerShell Remoting e o Invoke-Command
, mas o PsExec ainda tem seu lugar.
PsExec permite total interatividade para aplicativos de console sem a necessidade de instalar qualquer software. Como você verá neste Guia Definitivo, PsExec pode iniciar prompts de comando interativos, ser executado como sistema local em computadores remotos, executar comandos em vários computadores ao mesmo tempo e muito mais.
Ele oferece suporte a todas as versões do Windows desde o Windows XP. Isso significa que sim, PsExec no Windows 10 é uma realidade. É uma ferramenta simples de usar que funciona em praticamente tudo, mas não confunda sua simplicidade com suas capacidades!
Pré-requisitos
Você só precisa estar executando um sistema operacional Windows moderno para que o PsExec seja executado em seu computador local. No entanto, você vai querer executar o psexec em computadores remotos. Para fazer isso, você precisará garantir que alguns itens estejam no lugar.
Se você não tiver esses itens no momento ou não tiver certeza, não se preocupe. Na próxima seção, vamos mostrar como escrever alguns comandos PowerShell para testar seus computadores remotos.
- A modern Windows computer (local)
- Compartilhamento de Arquivos e Impressoras aberto (computador remoto, porta TCP 445)
- O admin$ compartilhamento administrativo disponível (computador remoto)
- Você conhece as credenciais de uma conta local (computador remoto)
Na data desta redação, PsExec está na versão 2.2 e será a versão que você aprenderá neste artigo.
Instalando o PsExec (Com Configuração em Computador Remoto)
Tecnicamente, você não precisa instalar o PsExec, pois é apenas uma utilidade de linha de comando, mas é próximo o suficiente. Como não é necessário instalação, você só precisa baixar e extrair do arquivo zip das PsTools. O PsExec não está disponível como uma utilidade independente e faz parte do conjunto de ferramentas PsTools.
Baixando o PSExec
Você pode extrair manualmente o arquivo ZIP ou aqui está um trecho útil do PowerShell para baixar e extrair o PsExec do arquivo ZIP das pstools. Observe que isso remove todas as outras ferramentas PsTools. Muitas ainda são úteis, mas não vamos abordá-las neste artigo.
Configuração do Computador Remoto
Depois de baixar o PsExec, você precisará garantir que qualquer computador remoto onde você pretende executá-lo esteja aberto. O PsExec tem requisitos simples; compartilhamento de arquivos e impressoras ativado e a parte administrativa admin$ disponível.
Você pode ir para todos os computadores remotos, abrir o aplicativo Firewall do Windows, ir para Aplicativos Permitidos e ativar Compartilhamento de Arquivos e Impressoras em todos os computadores, conforme mostrado abaixo.
Observe que o Compartilhamento de Arquivos e Impressoras é um risco conhecido à segurança, então certifique-se de que apenas o perfil de firewall Privado esteja habilitado.

Ou você pode visitar cada computador e executar a utilidade netsh para abrir via:
Ou você pode usar o cmdlet Set-NetFirewallRule
do PowerShell para fazer isso.
Se você preferir não visitar cada computador, você tem o PowerShell Remoting disponível e está em um domínio do Active Directory, você também pode abrir o firewall em muitos computadores de uma vez usando o cmdlet Invoke-Command
.
Usando PsExec
Antes de você correr, você precisa andar. Se você nunca usou o PsExec antes, você está prestes a se surpreender! Certifique-se de ler esta seção primeiro para se familiarizar com o básico antes de se aprofundar mais tarde neste artigo.
Na primeira vez que você executar o PsExec em um novo sistema, você verá imediatamente o contrato de licença do PsExec aparecer. Você terá que clicar no botão Concordo para começar a usá-lo.

Se você deseja evitar que o contrato de licença seja exibido, você pode aceitá-lo silenciosamente usando o switch /accepteula
conforme mostrado abaixo.
Você aprenderá alguns truques para silenciar esta janela pop-up de EULA em computadores locais e remotos mais tarde no artigo.
Encontrando Ajuda
Ao explorar o PsExec, você não deve usar nenhum switch. Quando você simplesmente executa o psexec sem nenhum switch, ele retornará todas as opções e uma breve explicação do que cada uma faz. Todas as opções estão na tabela abaixo para sua conveniência.
Switch | Explanation |
---|---|
-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 program 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. Some have reported best results always using the -s switch with -i due to windows being unintelligible. |
-h | If the target system is Vista or higher, has the proc |
-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 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 |
-x | Display the UI on the Winlogon secure desktop (local system only). |
-arm | Specifies the remote computer is of ARM architecture. |
-priority | Specifies -low, -belownormal, -abovenormal, -high or |
-realtime | run the process at a different priority. Use |
-background | run at low memory and I/O priority on Vista. |
computer | Direct PsExec to run the application on the 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 |
@file | PsExec will execute the command on each of the computers listed in the file. |
-accepteula | This flag suppresses the display of the license dialog. |
-nobanner | Do not display the startup banner and copyright message. |
Executando um Comando Remoto Simples
No seu nível mais básico, o PsExec requer dois parâmetros: um nome de computador e um comando para executar. Se você tiver um comando para executar no computador remoto que não requer argumentos como hostname
, você pode simplesmente adicioná-lo após o nome do computador.
Observe que se você não especificar um caminho de arquivo completo, o comando a ser executado deve estar no caminho do usuário ou do sistema. Além disso, se você tiver um programa com espaços no nome, você sempre pode incluir o programa entre espaços, como “meu aplicativo.exe”.
Você pode ver abaixo que, para executar o comando hostname
no computador CONTOSODC1, você define o caminho UNC seguido pelo comando. O PSExec se conectará ao computador remoto com segurança, executará o comando e retornará a saída. Neste caso, o comando hostname
retornou o nome do computador, que é CONTOSODC1.
Se o comando não for cmd
ou outro console, o PsExec sairá rapidamente da sessão remota e retornará o código de saída que o processo remoto retornou.
Nota: O erro ou código de saída retornado pelo psexec não vem do PsExec em si. Em vez disso, vem do comando que o psexec executou no computador remoto.

Como o PsExec Funciona em Computadores Remotos
O PsExec passa por algumas etapas para executar programas em computadores remotos.
- Crie um arquivo PSEXESVC.exe em C:\Windows.
- Crie e inicie um serviço do Windows no computador remoto chamado PsExec.
- Execute o programa sob um processo pai de psexesvc.exe.
- Quando concluído, o serviço PsExec do Windows será interrompido e removido.
Quando o processo não funciona 100% corretamente, você pode ter que remover manualmente o serviço usando o comando sc.
Executando um Comando Local Simples
Mesmo que o PsExec seja mais conhecido por executar comandos em computadores remotos, você também pode executar comandos localmente.
Você pode executar comandos localmente simplesmente não fornecendo um nome de computador como abaixo.
Por que você faria isso? Uma razão seria executar comandos como a conta local SYSTEM. Você pode usar o interruptor -s
para executar qualquer comando como SYSTEM localmente ou remotamente, como você aprenderá mais adiante.
Dê uma olhada no breve vídeo abaixo. Observe que você só precisa fornecer o interruptor -s
juntamente com o interpretador de comandos executável para o psexec iniciar uma nova sessão de comando como NT AUTHORITY\SYSTEM.

Comandos PsExec (Tornando-se Mais Avançado)
Depois de dominar o básico, você pode começar a aprender técnicas mais avançadas no psexec. PsExec pode fazer muito mais do que apenas executar um único comando em um único computador.
Executando comandos em vários computadores
O PsExec não se limita a executar comandos em um computador remoto por vez. Esta ferramenta também tem suporte para copiar programas e executar comandos em vários computadores de uma vez.
Você pode executar o PsExec em vários computadores de várias maneiras.
Nomes de Computadores Separados por Vírgula
Normalmente, ao executar um comando em um único computador remoto, você especificará um único nome de computador como \\REMOTECOMPUTER
. Você também pode especificar vários computadores separados por vírgulas, como abaixo.
Todos os Computadores em um Domínio do Active Directory
Se você estiver executando o PsExec em um computador associado a um domínio do Active Directory e deseja executar um comando em todos os computadores desse domínio, use um curinga.
O PsExec pesquisará todo o seu domínio do Active Directory e tentará executar um comando em cada computador. Abaixo está um exemplo de sintaxe de como o PsExec tentará se conectar a cada computador no domínio em que o computador em execução está e executar o comando hostname
.
Observe que se você usar um asterisco para encontrar todos os computadores em um domínio enquanto o computador local faz parte de um grupo de trabalho, você receberá o erro
Ocorreu um erro de sistema: 6118
.
O uso de um curinga força o PsExec a essencialmente executar o comando net view /all
para primeiro encontrar todos os computadores no domínio. Esta é uma maneira desatualizada de encontrar informações sobre computadores devido à sua dependência do NetBIOS.
Lendo de um Arquivo
Outra maneira de executar comandos em vários computadores ao mesmo tempo é usar um arquivo de texto. Usando a sintaxe @<filename.txt>
, o PsExec lerá cada linha no arquivo de texto como se fosse um nome de computador. Em seguida, processará cada computador individualmente.
Abaixo, você pode ver um exemplo de como usar o PowerShell para criar um arquivo de texto com nomes de computador delimitados por linhas e usar isso como entrada para o PsExec.
Copiando programas locais para o computador remoto
Usando a opção -c
, o psexec copiará qualquer programa local para o computador remoto antes da execução.
Talvez você tenha um arquivo EXE em seu computador local em uma pasta C:\Ferramentas e gostaria de executá-lo em um computador remoto. Você pode fazer isso usando a seguinte sintaxe:
Ao usar a opção -c
e não especificar um arquivo executável, o PsExec ainda copiará o arquivo, mas você receberá um erro informando que o sistema não pode encontrar o arquivo especificado. Isso acontece porque o PsExec sempre tentará executar o arquivo que você copiou.
Se precisar copiar arquivos para computadores remotos antes de usar o PsExec, use o cmdlet Copy-Item
do PowerShell em vez disso.
Executando Processos Remotos com Credenciais Alternativas
Outro caso de uso popular do PsExec é executar comandos com contas alternativas. Por padrão, o PsExec tentará se conectar ao computador remoto usando sua conta atualmente conectada. Mais especificamente, ele impersonará sua conta no computador remoto.
O uso da opção -u
e opcional -p
permite que você se conecte ao computador remoto com uma conta de usuário alternativa. O PsExec então criptografará tanto o nome de usuário quanto a senha e os enviará para o computador remoto para autenticação.
Por exemplo, se você estiver em um grupo de trabalho, sempre precisará especificar o nome de usuário para autenticar-se no computador remoto.
Se ambos os computadores forem membros do Active Directory, certifique-se de preceder a conta de usuário com o nome de domínio.
Observe que, quando você não usa o switch -u
, o psexec assume a identidade da sua conta conectada no computador remoto. Ele não terá acesso a nenhum recurso de rede.
Executando Processos como a Conta DO SISTEMA LOCAL
Uma das características mais úteis de executar o PsExec sob uma conta alternativa é usar o switch -s
. Este switch permite que o PsExec (e sua aplicação executada remotamente) seja executado sob a conta DO SISTEMA LOCAL do computador remoto (ou local).
Observe abaixo que eu não incluí um nome de computador remoto. O PsExec também executará com prazer no computador local. Neste caso, estou usando a opção -s
para instruir o PsExec a iniciar um prompt de comando local como a conta DO SISTEMA LOCAL.

Para executar um prompt de comando como SISTEMA LOCAL em um computador remoto, adicione o nome do computador à referência conforme abaixo:
Executando Aplicativos de Interface Gráfica Remotamente
Outro switch útil do PsExec é o -i
. Por padrão, o PsExec não permite que o comando executado remotamente abra janelas no computador remoto. Isso é útil porque, se você estiver executando comandos remotamente, não verá a tela de qualquer maneira.
Mas talvez você precise abrir programas para seus usuários. Você pessoalmente não estará usando a aplicação, mas um usuário final sim. Nesse caso, use o switch -i
.
Talvez você precise abrir uma janela do bloco de notas em um computador remoto. Não há problema. Execute o notepad.exe com o switch -i
e o PsExec abrirá o Bloco de Notas.

Certifique-se também de usar a opção -d
para desconectar quando a janela interativa for ativada. Por padrão, o PsExec aguardará o término do processo que foi executado. Se o processo remoto (o Bloco de Notas, neste caso) continuar em execução, o PsExec nunca retornará o controle.
O uso da opção -d
com -i
indicará ao PsExec para não esperar o término do processo remoto. Em vez disso, ele se desconectará e retornará o controle assim que o processo remoto for executado.
Redirecionando a Saída
O PsExec encaminhará qualquer saída enviada pelo processo remoto para sua sessão local. Normalmente, essa saída vai diretamente para o console local. Mas, se desejar redirecioná-la, você pode fazer isso usando os operadores típicos de redirecionamento.
Por exemplo, se desejar executar um comando e silenciar toda a saída, você pode redirecionar a saída e os erros para nulo usando ^> nul ^2^&1
.
Observe que os caracteres especiais são escapados com um acento circunflexo (
^
).
Casos de Uso do PsExec
Depois de aprender como usar o PsExec, você inevitavelmente encontrará vários casos de uso específicos. Nesta seção, você aprenderá alguns casos de uso e exemplos do mundo real usando o PsExec.
Iniciando um Prompt de Comando Remoto (psexec cmd
)
**Translation to Brazilian Portuguese:**
Uma das situações mais comuns é iniciar o PsExec como um prompt de comando interativo. O PsExec não apenas executa comandos remotamente, mas também pode enviar a saída do comando de volta para o console. Por causa disso, ele pode ser uma ótima alternativa ao telnet (se alguém ainda estiver usando) ou talvez uma substituição para o PowerShell Enter-PSSession
.
Para iniciar um comando remoto, especifique o nome do computador remoto e execute a aplicação cmd. Cmd é o interpretador de comandos do Windows. Como o PsExec suporta o uso interativo, ele retornará prontamente um cursor piscando e um prompt.

Neste ponto, o mundo está ao seu alcance. Você pode executar comandos no seu computador local através deste prompt de comando “aninhado”, e eles serão executados no computador remoto.
Para sair do prompt de comando, digite exit
. O PsExec interromperá o processo cmd
no computador remoto e retornará o foco para o computador local.
NÃO use Ctrl-C para sair de uma sessão interativa do cmd. Sempre use
exit
. Se você usar Ctrl-C, a sessão do psexec permanecerá em execução no computador remoto.
Instalando Software Remotamente
Você pode usar o PsExec como uma ferramenta de implantação de software simplificada. Talvez você tenha um instalador MSI que precisa ser executado em um ou mais computadores remotos chamado setup.msi. Este instalador precisa ser copiado para os computadores remotos e depois executado com a utilidade msiexec.exe com alguns parâmetros.
Abaixo está um exemplo de como você poderia usar o PsExec para implantar software remotamente. Este exemplo copia o arquivo setup.msi para o computador remoto e, em seguida, inicia o instalador MSI interativamente na conta SYSTEM.
Aceitando o EULA sem o comando /accepteula
Como mencionado anteriormente, na primeira vez que o PsExec é executado, é necessário aceitar um EULA. Você pode usar o comando /accepteula
, mas também pode “estagiá-lo” no registro.
Ao ser executado pela primeira vez, o PsExec cria uma chave de registro em HKCU\Software\Sysinternals\PsExec. Em vez dessa chave de registro, ele cria um valor de registro chamado EulaAccepted com um valor DWORD de 1.
Usando seu método favorito para modificar o registro em computadores remotos, você só precisa criar essa chave/valor nos computadores em que deseja executar o PsExec. Depois de criado, não é necessário executar o comando /accepteula
!
Unindo PowerShell e PsExec
Antes do PowerShell, só tínhamos o PsExec. Agora, temos opções. O PowerShell pode substituir o PsExec em muitas situações, mas complementá-lo em outras.
Criando nomes de computador com o PowerShell
Em vez de usar \\*
para encontrar todos os computadores no domínio, você pode usar o PowerShell. Usando o PowerShell, você não só pode escolher determinados computadores, mas também não precisa usar o comportamento vulnerável ao firewall do net view /all
.
Você pode usar o PowerShell para criar uma string contendo todos os nomes de computador separados por vírgula. Em seguida, você pode passar essa string para o PsExec, que processará cada um deles como se você os tivesse digitado manualmente.
Você pode ver abaixo um exemplo de uso do cmdlet Get-AdComputer
parte do módulo ActiveDirectory do PowerShell.
Habilitando o Remoting do PowerShell Remotamente
Se você tem computadores remotos que prefere usar o Remoting do PowerShell em vez do PsExec, você pode usar o PsExec para habilitá-los.
Ao executar o Enable-PSRemoting
ou o arquivo em lote winrm.cmd em computadores remotos, você pode rapidamente ativar o Remoting do PowerShell em muitos computadores de uma só vez.
Abaixo você pode ver um exemplo de chamada do arquivo em lote winrm.cmd em um computador remoto sendo executado como a conta SYSTEM. Como a saída desse comando não é necessária, ela é silenciada com 2>&1> $null
.
Mensagens de Erro do PsExec
Vale mencionar novamente que a maioria dos códigos de erro que você vê retornados pelo PsExec são do processo remoto; não do PsExec. Mas é útil ter uma compreensão desses códigos de erro e o que eles podem significar.
Se você deseja uma referência de todos os códigos de erro do Windows, recomendo verificar esta lista exaustiva de códigos de erro do Windows.
Abaixo está uma lista de códigos de erro comuns que você pode ver retornados pelo PsExec.
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 |
Seu Feedback
Guias Definitivos ATA são grandes. Há muita informação neles e é provável que eu deixe passar algo aqui ou ali ou cometa um erro. Se você notar algo errado ou achar que algo deve ser adicionado a este guia, por favor, me avise através dos comentários. Ficarei feliz em creditá-lo no post.
Créditos
- Agradecimentos a Mathias (comentários) por vários feedbacks.