If there was a command-line utility that could competite with robocopy in terms of useful, it’s PsExec. O Utilitário PsExec Sysinternals é tão omnipresente como vêm num arsenal de TI. Esta ferramenta permite que os administradores executem comandos remotamente como se estivessem no computador local.

para cobrir a ferramenta PsExec em profundidade, era adequado para cobrir esta ferramenta cobiçada em um guia final ATA. Neste guia, você vai aprender o que é psexec, o que ele é capaz de qualquer Muitos exemplos de como usar esta ferramenta útil.,

Índice

o Que é PsExec.exe?

Se você é novo nele ou talvez não tenha tido a necessidade de executar comandos e ferramentas em computadores remotos, você pode não saber o que é psexec.

PsExec ou psexec.o exe é um utilitário de linha de comandos construído para o Windows. Ele permite que os administradores executem programas em computadores locais e mais comumente remotos. É uma parte de utilidade livre da suite Sysinternals pstools construída por Mark Russinovich há muitos anos.,

foi construído para substituir ferramentas como o telnet que o forçou a abrir portas e introduzir vulnerabilidades de segurança. Hoje em dia, temos outras opções como PowerShell Remoting e o Invoke-Command PowerShell cmdlet mas PsExec ainda tem o seu lugar.

PsExec permite a interatividade total para a aplicação do console sem ter que instalar qualquer software. Como você verá através deste guia final, o PsExec pode lançar comandos interativos, Executar como sistema local em computadores remotos, executar comandos em vários computadores de uma vez e mais.,

suporta todas as versões do Windows desde o Windows XP. Isso significa que sim, PsExec no Windows 10 também é uma coisa. É uma ferramenta simples para executar que funciona em quase tudo, mas não confundir sua simplicidade com suas capacidades!

pré-requisitos

você simplesmente precisa estar executando um sistema operacional Windows moderno para o PsExec Executar no seu computador local. No entanto, você vai querer executar psexec contra computadores remotos. Para fazer isso, você precisa garantir que alguns itens estão no lugar.

Se você não tem estes itens em vigor agora ou incerto, não se preocupe., Na próxima seção, vamos cobrir como escrever alguma PowerShell para testar seus computadores remotos.

  • Um moderno computador com Windows (local)
  • Compartilhamento de Arquivo e Impressora aberta (computador remoto, a porta TCP 445)
  • O admin$ administrativa compartilhar disponíveis (computador remoto)
  • Você sabe que uma conta local da credencial (computador remoto)

neste momento, o PsExec é em v2.2 e será a versão que você vai aprender neste artigo.,

a instalar o PSexec (com a configuração remota do computador)

tecnicamente, não instala o PsExec, uma vez que é apenas um utilitário de linha de comandos, mas suficientemente perto. Uma vez que nenhuma instalação é necessária, você simplesmente precisa baixá-lo e extraí-lo do arquivo zip PsTools. PsExec não está disponível como um utilitário autônomo e faz parte do conjunto de ferramentas PsTools.

A transferir o PSExec

pode extrair o ficheiro ZIP manualmente ou aqui está um excerto de PowerShell útil para transferir e extrair o PsExec do seu ficheiro ZIP pstools. Note que isto remove todas as outras ferramentas PsTools., Muitos ainda são úteis, mas não vamos cobrir esses neste artigo.

Configuração remota do computador

Uma vez que você tenha PsExec Transferido, você precisará então garantir que qualquer computador remoto que você vai executá-lo está aberto. O PsExec tem requisitos simples; A partilha de ficheiros e Impressoras está activa e a partilha administrativa do administrador está disponível.

pode ir a todos os computadores remotos, abrir a ‘applet’ do Firewall do Windows, aceder às aplicações permitidas e activar a partilha de ficheiros e impressoras em todos os computadores, como vê em baixo.,

Note que a partilha de ficheiros e impressoras é um risco de segurança conhecido, de modo a garantir que apenas o perfil privado de firewall está activo.

, Permitindo o Compartilhamento de arquivos e Impressão no Firewall do Windows

Ou você pode visitar cada computador e execute o utilitário netsh para abri-lo através de:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

Ou você pode usar o PowerShell do Set-NetFirewallRule cmdlet para fazê-lo.,

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

Se você preferir não visitar cada computador, você ter o PowerShell Remoting disponível e estiver em um domínio do Active Directory, você pode também abrir o firewall em vários computadores de uma vez usando o Invoke-Command cmdlet.

usando PsExec

Antes de poder correr, você precisa andar. Se você nunca usou PsExec antes, você está dentro para um deleite! Certifique-se de ler esta seção primeiro para obter seus pés molhados para aprender o básico antes de saltar no final profundo mais tarde neste artigo.,

A primeira vez que você executar PsExec em um novo sistema, você verá imediatamente o Acordo de licença PsExec aparecer. Você terá que clicar no botão concordar para começar a usá-lo.

PSExec contrato de licença (EULA)

Se você deseja impedir que o contrato de licença que está sendo exibido, você pode silenciosamente aceitar usando o /accepteula opção como mostrado abaixo.,

> psexec /accepteula

você vai aprender alguns truques em Silenciar este popup EULA em computadores locais e remotos mais tarde no artigo.

encontrar ajuda

ao explorar o PsExec, você não deve usar nenhum interruptor. Quando você simplesmente executar psexec sem switches, ele retornará todas as opções e uma breve explicação do que cada um faz. Todas as opções estão na tabela abaixo para sua conveniência.,

Switch Explicação
-a Separar os processadores nos quais o aplicativo pode ser executado com vírgulas onde 1 é o menor número de CPU. Por exemplo, para executar a aplicação em CPU 2 e CPU 4, Digite: “-a 2,4”
-c Copie o programa especificado para o sistema remoto para execução. Se você omitir esta opção, a aplicação deve estar no caminho do sistema no sistema remoto.,
-d não espere que o processo termine (não interativo).
-e não carrega o perfil da conta especificada.
-f Copie o programa especificado, mesmo que o ficheiro já exista no sistema remoto.
-i execute o programa de modo que ele interage com o desktop da sessão especificada no sistema remoto. Se não for indicada nenhuma sessão, o processo corre na sessão da consola. Alguns relataram melhores resultados sempre usando o switch-s com-i devido ao windows ser ininteligível.,
-h se o sistema alvo é Vista ou superior, tem o proc
-l executar o processo como utilizador limitado (tira o grupo de Administradores e permite apenas privilégios atribuídos ao grupo de utilizadores). No Windows Vista, o processo é executado com baixa integridade.
-n especifica tempo-limite em segundos conectando-se a computadores remotos.
-p especifica a senha opcional para o nome do utilizador. Se omitir isto, ser-lhe-á pedido para introduzir uma senha escondida.,
-r especifica o nome do serviço remoto para criar ou interagir. com.
-s executar o processo remoto na conta do sistema.
-u especifica o nome de usuário opcional para login no computador.
-v Copie o ficheiro especificado apenas se tiver um número de versão mais elevado ou for mais recente do que o do sistema remoto.
-w define o directório de trabalho do processo (relativo
-x mostra a IU no ecrã seguro de Winlogon (apenas Sistema local).,
-arm Especifica que o computador remoto é de arquitetura ARM.
prioridade Especifica -baixa-abaixo do normal-acima do normal alta ou
-tempo real executar o processo em uma prioridade diferente. Use
-fundo executar a baixa memória e prioridade I / O No Vista.
computador PsExec directo para executar a aplicação no computador ou computadores especificados., Se você omitir o nome do computador PsExec executa a aplicação no sistema local, e se você especificar um caractere curinga (\*), o PsExec executa
@ficheiro PsExec irá executar o comando em cada um dos computadores listados no arquivo.
-accepteula esta bandeira suprime a visualização da janela de licenças.
-nobanner não exiba o banner de inicialização e mensagem de copyright.,

executando um comando remoto simples

no seu mais básico, o PsExec requer dois parâmetros: um nome de computador e um comando a executar. Se você tem um comando para executar no computador remoto que não necessita de quaisquer argumentos como hostname, você pode simplesmente adicioná-lo após o nome do computador.

Note que se você não especificar um caminho de arquivo completo, o comando a executar deve estar no caminho do usuário ou do sistema., Além disso, se você tem um programa com espaços no nome, você sempre pode incluir o programa em espaços como “minha aplicação.exe”.

> psexec \\REMOTECOMPUTER hostname

Você pode ver abaixo para executar o hostname comando no CONTOSODC1 computador, define-UNC caminho seguido do comando. O PSExec irá então ligar-se ao computador remoto de forma segura, executar o comando e devolver a saída. Neste caso, o comando hostname devolveu o nome do computador que é CONTOSODC1.,

Se o comando não for cmd ou outra consola, o PsExec irá sair rapidamente da sessão remota e devolver o código de saída que o processo remoto devolveu.

Nota: o código de erro ou saída devolvido do psexec não vem do próprio PsExec. Em vez disso, vem do comando que o psexec executou no computador remoto.,

Successful psexec remote command execution

How PsExec Works on Remote Computers

PsExec goes through a few steps to execute programs on remote computers.

  1. Create a PSEXESVC.exe file in C:\Windows.
  2. Create and start a Windows service on the remote computer called PsExec.
  3. Execute the program under a parent process of psexesvc.exe.
  4. When complete, the PsExec Windows service will be stopped and removed.,

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

embora 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.

> psexec <local command or EXE file>

Por que você faria isso? Uma razão seria executar comandos como a conta do sistema local., Você pode usar o -s switch para executar qualquer comando como sistema local ou remotamente, como você vai aprender mais sobre mais tarde.

dê uma olhada no vídeo curto abaixo. Observe que você simplesmente precisa fornecer o -s switch juntamente com o executável interpretador de comandos para psexec para lançar uma nova sessão de comandos como NT AUTHORITY\SYSTEM.,

Execução de Psexec como SISTEMA

PsExec Comandos (Mais freqüente)

uma Vez que você tem o básico para baixo, em seguida, você pode começar a aprender técnicas mais avançadas em psexec. PsExec pode fazer muito mais do que apenas executar um único comando em um único computador.

executar comandos em vários computadores

o PsExec não se limita apenas a executar comandos num computador remoto de cada vez., Esta ferramenta também tem suporte para copiar programas e executar comandos em vários computadores ao mesmo tempo.

Você pode executar PsExec em vários computadores ao mesmo tempo de algumas maneiras diferentes.

nomes de computadores separados por vírgulas

tipicamente ao executar um comando num único computador remoto, irá indicar um único nome de computador como \\REMOTECOMPUTER. Você também pode especificar vários computadores separados por vírgulas como abaixo.,

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

todos os computadores num domínio de directório activo

Se estiver a executar o PsExec num computador ligado ao domínio de directório activo e quiser executar uma execução de comandos em todos os computadores nesse domínio, use um cartão especial.

PsExec irá procurar por todo o seu domínio de directório activo e tentar executar um comando em todos os computadores. Abaixo está a sintaxe de exemplo sobre como PsExec vai tentar se conectar a todos os computadores no domínio o computador Executante é uma parte e executar o comando hostname.,

Note que se usar um asterisco para encontrar todos os computadores num domínio enquanto o computador local faz parte de um grupo de trabalho, irá receber o erroA system error has occurred: 6118.

usando um wildcard forces PsExec para essencialmente executar o comandonet view /all para primeiro encontrar todos os computadores no domínio. Esta é uma forma desatualizada de encontrar informações de computador devido à sua dependência de NetBIOS.

ler a partir de um ficheiro

outra forma de executar comandos em vários computadores de uma vez é usar um ficheiro de texto., Usando a sintaxe @<filename.txt>, o PsExec irá ler todas as linhas do arquivo de texto como se fosse um nome de computador. Irá então processar cada computador individualmente.

abaixo você pode ver um exemplo de usar PowerShell para criar um arquivo de texto de nomes de computador delimitados por linhas e usando isso como entrada para psexec.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txtPS51> psexec @computers.txt hostname

Copiar programas locais para o computador remoto

Usando a tag -c mudar, psexec vai copiar qualquer programa local para o computador remoto antes da execução.,talvez você tenha um EXE no seu computador local em um C:\Tools pasta e gostaria de executá-lo em um computador remoto. Poderá fazê-lo usando a seguinte sintaxe:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

quando usar o ID

switch e não indicar um ficheiro executável, o PsExec irá copiar à mesma o ficheiro, mas irá receber um erro ao afirmar que o sistema não consegue encontrar o ficheiro indicado. Isso acontece porque o PsExec sempre tentará executar o arquivo que você copia.,

Se necessitar de copiar ficheiros para computadores remotos antes de usar o PsExec, use o Copy-Item PowerShell cmdlet em alternativa.

executando processos remotos sob credenciais alternativas

outro caso de uso popular do PsExec é executar comandos sob contas alternativas. Por omissão, o PsExec irá tentar ligar-se ao computador remoto sob a sua conta actualmente registada. Mais especificamente, vai fazer-se passar pela sua conta no computador remoto.,

usando o-u e opcional-p switch permite-lhe ligar-se ao computador remoto com uma conta de utilizador alternativa. O PsExec irá então criptografar o nome de usuário e senha e enviá-los para o computador remoto para Autenticação.

por exemplo, se estiver num grupo de trabalho, terá sempre de indicar o nome de utilizador para se autenticar no computador remoto como.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p $$word

Se ambos os computadores são um membro do Active Directory, certifique-se de prefácio a conta de usuário com o nome de domínio.,

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p $$word

Note that when you do not use the-u switch, psexec personifica a sua conta registada no computador remoto. Não terá acesso a quaisquer recursos de rede.

processos em execução como a conta do sistema LOCAL

uma das características mais úteis de executar o PsExec sob uma conta alternativa é usar o botão-s. Esta opção permite ao PsExec (e à sua aplicação executada remotamente) executar sob a conta de sistema LOCAL do computador remoto (ou local).,

Notice below I didn’t include a remote computer name. O PsExec também irá correr de bom grado no computador local. Neste caso, estou usando a opção -s para dizer ao PsExec para lançar uma linha de comandos local como a conta do sistema LOCAL.,

Execução de psexec como SISTEMA LOCAL

Para executar um prompt de comando como um SISTEMA LOCAL em um computador remoto, adicione o nome do computador para a referência, como abaixo:

> psexec -s \\REMOTECOMPUTER cmd

o Lançamento de Aplicações GUI Remotamente

Outro úteis PsExec opção é -i. Por padrão, o PsExec não permite que o comando executado remotamente Faça aparecer quaisquer janelas no computador remoto., Isso é útil porque se você está executando comandos remotamente, Você não vai ver o ecrã de qualquer maneira.

mas talvez você precise trazer programas para seus usuários. Você, pessoalmente, não estará usando o aplicativo, mas um usuário final vai. Nesse caso, use o botão -i.

talvez você precise trazer uma janela de bloco de notas em um computador remoto. Não há problema. Corre o bloco de notas.exe com o-i switch e PsExec irá abrir o bloco de notas.,

> psexec -i \\REMOTECOMPUTER notepad
Execução de psexec no modo interativo

certifique-se também de utilizar o -d interruptor para desligar quando a janela interativa é levado embora. Por padrão, o PsExec irá esperar que o processo que executou seja concluído. Se o processo remoto (Bloco de notas neste caso) for mantido em execução, o PsExec nunca irá devolver o controle.,

Usando o switch com-i irá dizer ao PsExec para não esperar que o processo remoto termine. Em vez disso, irá desligar e devolver-lhe o controlo assim que o processo remoto for executado.

redirecionando a saída

Psexec irá depender de qualquer saída enviada do processo remoto para a sua sessão local. Normalmente, esta saída irá directamente para a sua consola local. Mas se você gostaria de redirecioná-lo, você pode fazê-lo usando operadores típicos de redirecionamento.,

Por exemplo, se quiser executar um comando e silenciar toda a saída, poderá redireccionar a saída e os erros para null usando ^> nul ^2^&1.

Note que os caracteres especiais são escapados com um chapéu. (^).

casos de Utilização do PsExec

Uma vez que tenha aprendido a utilizar o psexec, irá inevitavelmente deparar-se com vários casos específicos de Utilização. Nesta seção, você aprenderá alguns casos de uso no mundo real e exemplos usando psexec.,

lançando uma Prompt de comando remoto (psexec cmd)

um dos casos de uso mais comuns é lançar o PsExec como uma prompt de comando interativo. O PsExec não executa apenas comandos remotamente. Ele também pode enviar a saída de comando de volta para o seu console. Por causa disso, ele pode fazer um grande telnet (se alguém ainda está usando isso) ou talvez PowerShell Enter-PSSession substituição.

para lançar um comando remoto, indique o nome do computador remoto e execute a aplicação cmd. O Cmd é o interpretador de comandos do Windows., Uma vez que o PsExec suporta o uso interativo, ele irá de bom grado retornar um cursor intermitente e uma linha de comandos.

> psexec \\REMOTEPC cmd
Abrir um prompt de comando em um computador remoto

neste ponto, o mundo é a sua ostra. Você pode executar comandos no seu computador local através desta linha de comandos “aninhada” e eles serão executados no computador remoto.

para sair da linha de comandos, escreva exit., PsExec irá parar o processo cmd no computador remoto e voltar o foco para o computador local.

não utilize Ctrl-C para fechar uma sessão interactiva cmd. Use sempre exit. Se usar o Ctrl-C, a sessão psexec continuará a correr no computador remoto.

instalação de Software remotamente

pode utilizar o PsExec como uma ferramenta de implantação de software para pessoas pobres. Talvez você tenha um instalador MSI que você precisa executar em um ou mais computadores remotos chamados setup.pacote., Este instalador precisa ser copiado para os computadores remotos e então executado com o msiexec.utilitário exe com alguns interruptores.

abaixo está um exemplo de como você pode usar o PsExec para implantar o software remotamente. Este exemplo copia configuração.msi para o computador remoto, em seguida, lança o instalador MSI interativamente como a conta do sistema.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

aceitando a EULA sem a opção/accepteula

conforme mencionado anteriormente, a primeira vez que o PsExec correr, terá de aceitar uma EULA., Você poderia usar o botão /accepteula mas você também poderia “encená-lo” no registro.

Quando lançado pela primeira vez, o PsExec cria uma chave de registo em HKCU\Software\Sysinternals\PsExec. Em vez dessa chave de registro, ela cria um valor de registro chamado EulaAccepted com um valor de DWORD de 1.

Usando o seu método favorito para modificar o registro em computadores remotos, você simplesmente precisa criar esta chave/valor em computadores que você gostaria de executar PsExec no. Uma vez criado, não há necessidade de executar /accepteula!,

casar PowerShell e PsExec

Antes de PowerShell, tudo o que tínhamos era PsExec. Agora, temos opções. PowerShell pode substituir PsExec em muitas situações, mas complementá-lo em outras.

construir nomes de computadores com PowerShell

em vez de usar \\* para encontrar todos os computadores no domínio, você pode usar PowerShell em vez disso. Ao usar PowerShell, você não pode apenas escolher certos computadores, mas você não tem que usar o comportamento propenso à firewall net view /all comportamento.,

Você pode usar PowerShell para criar uma string contendo todos os nomes de computador separados por uma vírgula. Você pode então passar essa string para PsExec que irá simplesmente processar cada um como você digitou cada um manualmente.

pode ver abaixo um exemplo de Utilização do Get-AdComputer cmdlet parte do módulo PowerShell ActiveDirectory.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

activar a remoção PowerShell remotamente

Se tiver computadores remotos com os quais prefere usar a remoção PowerShell em vez do PsExec, poderá usar o PsExec para os activar.,

executando Enable-PSRemoting ou o winrm.arquivo em lote cmd em computadores remotos, você pode rapidamente ligar a PowerShell Remoting em muitos computadores ao mesmo tempo.

abaixo você pode ver um exemplo de chamar o winrm.ficheiro em lote cmd num computador remoto a correr como conta do sistema. Como o resultado desse comando não é necessário, ele é silenciado com 2>&1> $null.

$computerName = 'REMOTECOMPUTER'psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

mensagens de erro PsExec

vale a pena mencionar mais uma vez que a maioria dos códigos de erro que você vê devolvidos Do PsExec são do processo remoto; não do PsExec., Mas é útil ter uma compreensão destes códigos de erro e o que eles podem significar.

Se quiser uma referência em 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 devolvidos pelo PsExec.

Código de Erro Explicação
-2146232576 Normalmente retornado pelo Windows Update quando ocorre um erro.,
0 Comando executado com sucesso.
1 função Incorreta. Aconteceu um problema. É tudo.erro Fatal durante a instalação. Isto normalmente é devolvido pelo msiexec.
2 O sistema não é possível localizar o arquivo especificado
4 O sistema não pode abrir o arquivo.acesso negado.
6 o cabo é inválido.,
6118 lista de servidores para este grupo de trabalho não está disponível no momento

Seu Feedback