Se houvesse uma utilidade de linha de comando que pudesse competir com o robocopy em termos de utilidade, seria o PsExec. A utilidade PsExec da Sysinternals é tão ubíqua 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 abordar a ferramenta PsExec em profundidade, era apropriado cobrir essa ferramenta cobiçada em um Guia Completo da ATA. Neste guia, você aprenderá o que é o psexec, suas capacidades 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 é uma utilidade de linha de comando construída para o Windows. Permite que os administradores executem programas em computadores locais e, mais comumente, em computadores remotos. É uma utilidade gratuita parte do Sysinternals pstools suite construído por Mark Russinovich há muitos anos.
Foi criado para substituir ferramentas como o telnet, que obrigavam a abrir portas e introduziam vulnerabilidades de segurança. Atualmente, temos outras opções como o PowerShell Remoting e o Invoke-Command
cmdlet do PowerShell, 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, o PsExec pode iniciar prompts de comando interativos, ser executado como sistema local em computadores remotos, executar comandos em vários computadores simultaneamente e muito mais.
Ele oferece suporte a todas as versões do Windows desde o Windows XP. Isso significa que sim, o PsExec no Windows 10 também é possível. É uma ferramenta simples de usar que funciona em quase tudo, mas não confunda sua simplicidade com suas capacidades!
Pré-requisitos
Você simplesmente 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 em ordem.
Se você ainda não possui esses itens ou está inseguro, não se preocupe. Na próxima seção, abordaremos como escrever algum 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, o PsExec está na versão 2.2 e será a versão abordada neste artigo.
Instalando o PsExec (Com Configuração em Computador Remoto)
Tecnicamente, você não instala o PsExec, já que é apenas uma utilidade de linha de comando, mas é quase isso. Como nenhuma instalação é necessária, você só precisa baixá-lo e extrair do arquivo zip do 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 o arquivo ZIP manualmente ou aqui está um trecho útil do PowerShell para baixar e extrair o PsExec do arquivo ZIP do pstools. Observe que isso remove todas as outras ferramentas PsTools. Muitas delas 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 em que você vá executá-lo esteja aberto. O PsExec tem requisitos simples; Compartilhamento de Arquivos e Impressoras ativado e o compartilhamento administrativo admin$ disponível.
Você poderia ir a todos os computadores remotos, abrir o applet Firewall do Windows, ir para Aplicativos Permitidos e ativar Compartilhamento de Arquivos e Impressoras em todos os computadores, como mostrado abaixo.
Observe que o Compartilhamento de Arquivos e Impressoras é um risco de segurança conhecido, então garanta que apenas o perfil de firewall Privado esteja habilitado.

Ou você poderia visitar cada computador e executar a utilidade netsh para abrir via:
Ou você poderia 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 Active Directory, você também pode abrir o firewall em vários computadores de uma só vez usando o cmdlet Invoke-Command
.
Usando o PsExec
Antes de você poder executar, você precisa aprender. Se você nunca usou o PsExec antes, está prestes a ter uma experiência incrível! Certifique-se de ler esta seção primeiro para ter uma noção básica antes de aprofundar-se mais adiante neste artigo.
Na primeira vez que você executar o PsExec em um novo sistema, você verá imediatamente o contrato de licença do PsExec. Você terá que clicar no botão Aceitar para começar a usá-lo.

Se você deseja impedir 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 de EULA em computadores locais e remotos mais adiante no artigo.
Encontrando Ajuda
Ao explorar o PsExec, você não deve usar nenhum switch. Quando você simplesmente executa o psexec sem switches, 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 completo do arquivo, 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, sempre pode colocar o programa entre espaços, como “my application.exe”.
Você pode ver abaixo que para executar o comando hostname
no computador CONTOSODC1, você define o caminho UNC seguido pelo comando. O PSExec então se conectará ao computador remoto de forma segura, 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 outra 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, pode ser necessário 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 mostrado abaixo.
Por que você faria isso? Uma razão seria executar comandos como a conta local SYSTEM. Você pode usar o parâmetro -s
para executar qualquer comando como SYSTEM localmente ou remotamente, como você aprenderá mais adiante.
Dê uma olhada no vídeo curto abaixo. Observe que você só precisa fornecer o parâmetro -s
junto 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 único computador remoto de cada vez. Esta ferramenta também suporta 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 \\COMPUTADORREMOTo
. 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 estiver executando 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 caractere 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 todos os computadores no domínio em que o computador em execução está inserido 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, receberá o erro
Ocorreu um erro do sistema: 6118
.
O uso de um caractere 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 de computador devido à sua dependência do NetBIOS.
Lendo de um Arquivo
Outra maneira de executar comandos em vários computadores de uma só vez é usar um arquivo de texto. Usando a sintaxe @<nomedoarquivo.txt>
, o PsExec lerá cada linha no arquivo de texto como se fosse um nome de computador. Ele então processará cada computador individualmente.
Abaixo você pode ver um exemplo de uso do PowerShell para criar um arquivo de texto com nomes de computadores delimitados por linha e usar isso como entrada para o psexec.
Copiando programas locais para o computador remoto
Usando a opção -c
, o psexec irá 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:\Tools 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 indicando que o sistema não pode encontrar o arquivo especificado. Isso acontece porque o PsExec sempre tentará executar o arquivo que você copia.
Se você precisar copiar arquivos para computadores remotos antes de usar o PsExec, use o Copy-Item
cmdlet 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 irá 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á ao computador remoto para autenticação.
Por exemplo, se você estiver em um grupo de trabalho, sempre será necessário especificar o nome de usuário para autenticar-se no computador remoto.
Se ambos os computadores forem membros do Active Directory, certifique-se de prefixar a conta de usuário com o nome do domínio.
Note que quando você não usa o switch -u
, o psexec assume sua conta logada 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 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 dizer ao PsExec para 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 como abaixo:
Executando Aplicativos GUI 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, de qualquer maneira não verá a tela.
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 de bloco de notas em um computador remoto. Sem problemas. Execute notepad.exe com o switch -i
e o PsExec abrirá o Bloco de Notas.

Certifique-se também de usar o interruptor -d
para desconectar quando a janela interativa for ativada. Por padrão, o PsExec aguardará o processo que ele executou ser concluído. Se o processo remoto (como o Bloco de Notas neste caso) continuar em execução, o PsExec nunca retornará o controle.
O uso do interruptor -d
com -i
indicará ao PsExec para não aguardar a conclusão do processo remoto. Em vez disso, ele se desconectará e retornará o controle para você assim que o processo remoto for executado.
Redirecionamento de Saída
O PsExec transmitirá qualquer saída enviada pelo processo remoto para sua sessão local. Tipicamente, essa saída vai diretamente para o seu console local. Mas se você quiser redirecioná-la, pode fazer isso usando operadores de redirecionamento típicos.
Por exemplo, se deseja executar um comando e silenciar toda a saída, 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 a 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.
Executando um Prompt de Comando Remoto (psexec cmd
)
Um dos casos de uso 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 um ótimo substituto para o telnet (se alguém ainda estiver usando) ou talvez para o comando PowerShell Enter-PSSession
.
Para iniciar um comando remoto, especifique o nome do computador remoto e execute o aplicativo cmd. Cmd é o interpretador de comandos do Windows. Como o PsExec suporta o uso interativo, ele retornará um cursor piscando e um prompt com prazer.

Neste ponto, o mundo está em suas mãos. 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 encerrará o processo cmd
no computador remoto e retornará o foco para o computador local.
NÃO use Ctrl-C para fechar uma sessão interativa do cmd. Sempre use
exit
. Se você usar Ctrl-C, a sessão do psexec continuará em execução no computador remoto.
Instalando Software Remotamente
Você pode usar o PsExec como uma ferramenta de implantação de software básica. 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, em seguida, executado com o utilitário msiexec.exe com algumas opções.
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 de forma interativa na conta SYSTEM.
Aceitando o EULA sem o switch /accepteula
Como mencionado anteriormente, na primeira execução do PsExec, será necessário aceitar um EULA. Você pode usar o switch /accepteula
, mas também pode “prepará-lo” no registro.
Ao ser lançado 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. Uma vez criado, não há necessidade de executar /accepteula
!
Casando PowerShell e PsExec
Antes do PowerShell, tínhamos apenas o PsExec. Agora, temos opções. O PowerShell pode substituir o PsExec em muitas situações, mas complementá-lo em outras.
Construindo Nomes de Computador com 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 propenso a firewall de net view /all
.
Você pode usar o PowerShell para criar uma string contendo todos os nomes de computador separados por vírgula. Você pode então passar essa string para o PsExec, que processará cada um como se você tivesse digitado manualmente.
Você pode ver abaixo um exemplo de uso do cmdlet Get-AdComputer
parte do módulo ActiveDirectory do PowerShell .
Habilitando a Remoção do PowerShell Remotamente
Se você tiver computadores remotos que prefira usar a Remoção do PowerShell em vez do PsExec, pode usar o PsExec para habilitá-los.
Ao executar Enable-PSRemoting
ou o arquivo em lote winrm.cmd em computadores remotos, você pode ativar rapidamente a Remoção do PowerShell em vários 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 do SISTEMA. Como a saída desse comando não é necessária, ela é silenciada com 2>&1> $null
.
Mensagens de Erro do PsExec
Vale mencionar novamente desde o início que a maioria dos códigos de erro que você vê retornados do 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ê gostaria de uma referência sobre todos os códigos de erro do Windows, recomendo conferir 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 da ATA são grandes. Há muita informação neles e é provável que eu perca alguma coisa aqui ou ali, ou cometa um erro. Se você notar algo errado ou achar que algo deveria ser adicionado a este guia, por favor, me avise pelos comentários. Ficarei feliz em dar créditos a você na postagem.
Créditos
- Agradecimentos a Mathias (comentários) por vários feedbacks.