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.
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.
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.,
How PsExec Works on Remote Computers
PsExec goes through a few steps to execute programs on remote computers.
- Create a PSEXESVC.exe file in C:\Windows.
- Create and start a Windows service on the remote computer called PsExec.
- Execute the program under a parent process of psexesvc.exe.
- 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.,
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 erro
A 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.,
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
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
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 |
Deixe uma resposta