S’il existait un utilitaire en ligne de commande capable de rivaliser avec robocopy en termes d’utilité, ce serait PsExec. L’utilitaire PsExec de Sysinternals est aussi répandu qu’il peut l’être dans l’arsenal d’un administrateur informatique. Cet outil permet aux administrateurs d’exécuter des commandes à distance comme s’ils étaient sur l’ordinateur local.
Pour couvrir l’outil PsExec en profondeur, il était approprié de présenter cet outil convoité dans un Guide Ultime ATA. Dans ce guide, vous apprendrez ce qu’est psexec, ce dont il est capable et de nombreux exemples d’utilisation de cet outil utile.
Qu’est-ce que PsExec.exe?
Si vous êtes nouveau dans le domaine de l’informatique ou si vous n’avez peut-être pas eu besoin d’exécuter des commandes et des outils sur des ordinateurs à distance, vous pourriez ne pas savoir ce qu’est psexec.
PsExec ou psexec.exe est un utilitaire en ligne de commande conçu pour Windows. Il permet aux administrateurs d’exécuter des programmes sur des ordinateurs locaux et plus couramment à distance. Il s’agit d’un utilitaire gratuit faisant partie de la suite Sysinternals pstools développée par Mark Russinovich il y a de nombreuses années.
Il a été conçu pour remplacer des outils tels que telnet qui vous obligeaient à ouvrir des ports et à introduire des vulnérabilités de sécurité. De nos jours, nous avons d’autres options comme PowerShell Remoting et la cmdlet PowerShell Invoke-Command
, mais PsExec a encore sa place.
PsExec permet une interactivité complète pour les applications console sans avoir à installer de logiciel. Comme vous le verrez dans ce guide ultime, PsExec peut lancer des invites de commandes interactives, s’exécuter en tant que système local sur des ordinateurs distants, exécuter des commandes sur plusieurs ordinateurs à la fois et bien plus encore.
Il prend en charge toutes les versions de Windows depuis Windows XP. Cela signifie que oui, PsExec sur Windows 10 est également possible. C’est un outil simple à utiliser qui fonctionne sur presque tout, mais ne confondez pas sa simplicité avec ses capacités !
Prérequis
Vous devez simplement exécuter un système d’exploitation Windows moderne pour que PsExec fonctionne sur votre ordinateur local. Cependant, vous allez vouloir exécuter PsExec sur des ordinateurs distants. Pour cela, vous devrez vous assurer que quelques éléments sont en place.
Si vous n’avez pas encore ces éléments en place ou si vous n’êtes pas sûr, ne vous inquiétez pas. Dans la section suivante, nous expliquerons comment écrire un script PowerShell pour tester vos ordinateurs distants.
- A modern Windows computer (local)
- Partage de fichiers et d’imprimantes ouvert (ordinateur distant, port TCP 445)
- Le partage administratif admin$ est disponible (ordinateur distant)
- Vous connaissez les identifiants d’un compte local (ordinateur distant)
Au moment de la rédaction de cet article, PsExec est à la version 2.2 et c’est cette version dont vous apprendrez dans cet article.
Installation de PsExec (avec configuration de l’ordinateur distant)
Techniquement, vous n’avez pas besoin d’installer PsExec car c’est simplement une utilitaire en ligne de commande, mais c’est assez proche. Comme aucune installation n’est nécessaire, vous devez simplement le télécharger et l’extraire du fichier zip PsTools. PsExec n’est pas disponible en tant qu’utilitaire autonome et fait partie de la suite d’outils PsTools.
Téléchargement de PSExec
Vous pouvez soit extraire manuellement le fichier ZIP, soit utiliser ce fragment de code PowerShell pratique pour télécharger et extraire PsExec à partir de son fichier zip pstools. Notez que cela supprime tous les autres outils PsTools. Beaucoup sont toujours utiles, mais nous n’en parlerons pas dans cet article.
Configuration de l’ordinateur distant
Une fois que vous avez téléchargé PsExec, vous devez vous assurer que l’ordinateur distant sur lequel vous allez l’exécuter est accessible. PsExec a des exigences simples : le partage de fichiers et d’imprimantes activé et le partage administratif admin$ disponible.
Vous pourriez accéder à tous les ordinateurs distants, ouvrir le module complémentaire Pare-feu Windows, accéder à Applications autorisées et activer le partage de fichiers et d’imprimantes sur tous les ordinateurs, comme indiqué ci-dessous.
Notez que le partage de fichiers et d’imprimantes est un risque connu pour la sécurité, assurez-vous donc que seul le profil de pare-feu Privé est activé.

Ou vous pourriez visiter chaque ordinateur et exécuter l’utilitaire netsh pour l’ouvrir via :
Ou vous pourriez utiliser la cmdlet Set-NetFirewallRule de PowerShell pour le faire.
Si vous préférez ne pas visiter chaque ordinateur, vous avez PowerShell Remoting disponible et vous êtes dans un domaine Active Directory, vous pouvez également ouvrir le pare-feu sur plusieurs ordinateurs à la fois en utilisant la cmdlet Invoke-Command
.
Utilisation de PsExec
Avant de pouvoir courir, il faut savoir marcher. Si vous n’avez jamais utilisé PsExec auparavant, vous êtes sur le point de découvrir quelque chose d’intéressant ! Assurez-vous de lire cette section d’abord pour vous familiariser avec les bases avant de vous aventurer plus loin dans cet article.
La première fois que vous exécutez PsExec sur un nouveau système, vous verrez immédiatement apparaître le contrat de licence de PsExec. Vous devrez cliquer sur le bouton Accepter pour commencer à l’utiliser.

Si vous souhaitez empêcher l’affichage du contrat de licence, vous pouvez l’accepter silencieusement en utilisant l’option /accepteula
comme indiqué ci-dessous.
Vous apprendrez quelques astuces pour supprimer cette fenêtre contextuelle EULA sur les ordinateurs locaux et distants plus tard dans l’article.
Trouver de l’aide
Lorsque vous explorez PsExec, vous ne devez utiliser aucune option du tout. Lorsque vous exécutez simplement psexec sans aucune option, il renvoie toutes les options et une brève explication de ce que chacune fait. Toutes les options sont répertoriées dans le tableau ci-dessous pour votre commodité.
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. |
Exécution d’une simple commande à distance
À son niveau le plus basique, PsExec nécessite deux paramètres : un nom d’ordinateur et une commande à exécuter. Si vous avez une commande à exécuter sur l’ordinateur distant qui ne nécessite pas d’arguments comme hostname
, vous pouvez simplement l’ajouter après le nom de l’ordinateur.
Notez que si vous ne spécifiez pas un chemin de fichier complet, la commande à exécuter doit se trouver dans le chemin de l’utilisateur ou du système. De plus, si vous avez un programme avec des espaces dans le nom, vous pouvez toujours mettre le programme entre guillemets comme « mon application.exe ».
Vous pouvez voir ci-dessous qu’en exécutant la commande hostname
sur l’ordinateur CONTOSODC1, vous définissez son chemin UNC suivi de la commande. PSExec se connectera ensuite à l’ordinateur distant de manière sécurisée, exécutera la commande et renverra la sortie. Dans ce cas, la commande hostname
a renvoyé le nom d’hôte de l’ordinateur qui est CONTOSODC1.
Si la commande n’est pas cmd
ou une autre console, PsExec quittera rapidement la session distante et renverra le code de sortie retourné par le processus distant.
Remarque : Le code d’erreur ou de sortie renvoyé par psexec ne provient pas de PsExec lui-même. Il provient de la commande exécutée par psexec sur l’ordinateur distant.

Comment fonctionne PsExec sur les ordinateurs distants
PsExec effectue quelques étapes pour exécuter des programmes sur des ordinateurs distants.
- Créer un fichier PSEXESVC.exe dans C:\Windows.
- Créer et démarrer un service Windows sur l’ordinateur distant appelé PsExec.
- Exécuter le programme sous un processus parent de psexesvc.exe.
- Une fois terminé, le service Windows PsExec sera arrêté et supprimé.
Lorsque le processus ne fonctionne pas correctement à 100 %, vous devrez peut-être supprimer manuellement le service à l’aide de la commande sc.
Exécution d’une commande locale simple
Bien que PsExec soit surtout connu pour exécuter des commandes sur des ordinateurs distants, vous pouvez également exécuter des commandes localement.
Vous pouvez exécuter des commandes localement en ne spécifiant tout simplement pas de nom d’ordinateur comme ci-dessous.
Pourquoi feriez-vous cela ? Une raison serait d’exécuter des commandes en tant que compte local SYSTEM. Vous pouvez utiliser le commutateur -s
pour exécuter n’importe quelle commande en tant que SYSTEM localement ou à distance, comme vous le découvrirez plus tard.
Jetez un coup d’œil à la courte vidéo ci-dessous. Remarquez que vous devez simplement fournir le commutateur -s
ainsi que l’exécutable de l’interpréteur de commandes pour que psexec lance une nouvelle session de commandes en tant que NT AUTHORITY\SYSTEM.

Commandes PsExec (Approfondissement)
Une fois que vous maîtrisez les bases, vous pouvez commencer à apprendre des techniques plus avancées dans psexec. PsExec peut faire beaucoup plus que simplement exécuter une seule commande sur un seul ordinateur.
Exécution de commandes sur plusieurs ordinateurs
PsExec n’est pas limité à l’exécution de commandes sur un seul ordinateur distant à la fois. Cet outil prend également en charge la copie de programmes et l’exécution de commandes sur plusieurs ordinateurs simultanément.
Vous pouvez exécuter PsExec sur plusieurs ordinateurs de différentes manières.
Noms d’ordinateurs séparés par des virgules
Généralement, lors de l’exécution d’une commande sur un seul ordinateur distant, vous spécifiez un seul nom d’ordinateur comme \\ORDINATEURDISTANT
. Vous pouvez également spécifier plusieurs ordinateurs séparés par des virgules comme ci-dessous.
Tous les ordinateurs dans un domaine Active Directory
Si vous exécutez PsExec sur un ordinateur joint à un domaine Active Directory et que vous souhaitez exécuter une commande sur tous les ordinateurs de ce domaine, utilisez un joker.
PsExec recherchera l’ensemble de votre domaine Active Directory et tentera d’exécuter une commande sur chaque ordinateur. Voici un exemple de syntaxe indiquant comment PsExec tentera de se connecter à chaque ordinateur du domaine auquel appartient l’ordinateur exécutant et d’exécuter la commande hostname
.
Notez que si vous utilisez un astérisque pour rechercher tous les ordinateurs d’un domaine alors que l’ordinateur local fait partie d’un groupe de travail, vous recevrez l’erreur
Une erreur système s'est produite : 6118
.
L’utilisation d’un joker oblige PsExec à exécuter essentiellement la commande net view /all
pour d’abord rechercher tous les ordinateurs du domaine. Il s’agit d’une méthode obsolète pour trouver des informations sur les ordinateurs en raison de sa dépendance à NetBIOS.
Lecture à partir d’un fichier
Une autre façon d’exécuter des commandes sur plusieurs ordinateurs en même temps consiste à utiliser un fichier texte. En utilisant la syntaxe @<nomfichier.txt>
, PsExec lira chaque ligne du fichier texte comme s’il s’agissait d’un nom d’ordinateur. Il traitera ensuite chaque ordinateur individuellement.
Ci-dessous, vous pouvez voir un exemple d’utilisation de PowerShell pour créer un fichier texte contenant des noms d’ordinateurs séparés par des lignes et l’utiliser comme entrée pour psexec.
Copier des programmes locaux vers l’ordinateur distant
En utilisant l’option -c
, psexec copiera tout programme local sur l’ordinateur distant avant l’exécution.
Peut-être avez-vous un fichier EXE sur votre ordinateur local dans un dossier C:\Outils et souhaitez-vous l’exécuter sur un ordinateur distant. Vous pouvez le faire en utilisant la syntaxe suivante:
Lorsque vous utilisez l’option -c
sans spécifier de fichier exécutable, PsExec copiera quand même le fichier mais vous recevrez une erreur indiquant le système ne peut pas trouver le fichier spécifié. Cela se produit car PsExec tentera toujours d’exécuter le fichier que vous copiez.
Si vous avez besoin de copier des fichiers sur des ordinateurs distants avant d’utiliser PsExec, utilisez plutôt la cmdlet PowerShell Copy-Item
.
Exécution de processus distants avec des informations d’identification alternatives
Un autre cas d’utilisation populaire de PsExec est d’exécuter des commandes avec des comptes alternatifs. Par défaut, PsExec tentera de se connecter à l’ordinateur distant sous votre compte actuellement connecté. Plus précisément, il imitera votre compte sur l’ordinateur distant.
L’utilisation de l’option -u
et éventuellement de l’option -p
vous permet de vous connecter à l’ordinateur distant avec un compte utilisateur alternatif. PsExec cryptera ensuite à la fois le nom d’utilisateur et le mot de passe et les enverra à l’ordinateur distant pour l’authentification.
Par exemple, si vous êtes dans un groupe de travail, vous devrez toujours spécifier le nom d’utilisateur pour vous authentifier sur l’ordinateur distant.
Si les deux ordinateurs sont membres d’Active Directory, assurez-vous de préfixer le compte utilisateur avec le nom de domaine.
Notez que lorsque vous n’utilisez pas l’option -u
, psexec se fait passer pour votre compte connecté sur l’ordinateur distant. Il n’aura pas accès aux ressources réseau.
Exécution de processus en tant que compte LOCAL SYSTEM
Une des fonctionnalités les plus utiles de l’exécution de PsExec sous un compte alternatif est l’utilisation de l’option -s
. Cette option permet à PsExec (et à votre application exécutée à distance) de s’exécuter sous le compte LOCAL SYSTEM de l’ordinateur distant (ou local).
Remarquez ci-dessous que je n’ai pas inclus de nom d’ordinateur distant. PsExec s’exécutera tout aussi bien sur l’ordinateur local. Dans ce cas, j’utilise l’option -s
pour indiquer à PsExec de lancer une invite de commandes locale en tant que compte LOCAL SYSTEM.

Pour exécuter une invite de commandes en tant que compte LOCAL SYSTEM sur un ordinateur distant, ajoutez le nom de l’ordinateur à la référence comme ci-dessous:
Lancement d’applications GUI à distance
Une autre option utile de PsExec est -i
. Par défaut, PsExec n’autorise pas la commande exécutée à distance à ouvrir des fenêtres sur l’ordinateur distant. Cela est utile car si vous exécutez des commandes à distance, vous ne verrez pas l’écran de toute façon.
Mais peut-être avez-vous besoin d’ouvrir des programmes pour vos utilisateurs. Vous n’utiliserez pas personnellement l’application, mais un utilisateur final le fera. Dans ce cas, utilisez l’option -i
.
Peut-être avez-vous besoin d’ouvrir une fenêtre Notepad sur un ordinateur distant. Pas de problème. Exécutez notepad.exe avec l’option -i
et PsExec ouvrira Notepad.

Assurez-vous également d’utiliser l’option -d
pour vous déconnecter lorsque la fenêtre interactive est affichée. Par défaut, PsExec attendra que le processus qu’il a exécuté se termine. Si le processus distant (Notepad dans ce cas) continue de s’exécuter, PsExec ne rendra jamais le contrôle.
L’utilisation de l’option -d
avec -i
indiquera à PsExec de ne pas attendre que le processus distant se termine. Au lieu de cela, il se déconnectera et vous rendra le contrôle dès que le processus distant sera exécuté.
Redirection de la sortie
Psexec dépendra de toute sortie envoyée par le processus distant vers votre session locale. Habituellement, cette sortie ira directement vers votre console locale. Mais si vous souhaitez la rediriger, vous pouvez le faire en utilisant les opérateurs de redirection habituels.
Par exemple, si vous souhaitez exécuter une commande et supprimer toute sortie, vous pouvez rediriger la sortie et les erreurs vers null en utilisant ^> nul ^2^&1
.
Notez que les caractères spéciaux sont échappés avec un chapeau. (
^
).
Cas d’utilisation de PsExec
Une fois que vous aurez appris à utiliser PsExec, vous rencontrerez inévitablement différents cas d’utilisation spécifiques. Dans cette section, vous apprendrez certains cas d’utilisation réels et des exemples utilisant PsExec.
Lancement d’une invite de commande distante (psexec cmd
)
L’un des cas d’utilisation les plus courants consiste à lancer PsExec en tant que fenêtre de commande interactive. PsExec ne se contente pas d’exécuter des commandes à distance. Il peut également renvoyer la sortie des commandes à votre console. Grâce à cela, il peut être utilisé comme un excellent remplacement de telnet (si quelqu’un l’utilise encore) ou peut-être de PowerShell Enter-PSSession
.
Pour lancer une commande à distance, spécifiez le nom de l’ordinateur distant et exécutez l’application cmd. Cmd est l’interpréteur de commandes Windows. Étant donné que PsExec prend en charge une utilisation interactive, il renverra volontiers un curseur clignotant et un indicateur.

À ce stade, le monde est à votre portée. Vous pouvez exécuter des commandes sur votre ordinateur local via cette fenêtre de commande « imbriquée » et elles seront exécutées sur l’ordinateur distant.
Pour quitter la fenêtre de commande, tapez exit
. PsExec arrêtera le processus cmd
sur l’ordinateur distant et renverra le focus à l’ordinateur local.
N’utilisez PAS Ctrl-C pour fermer une session cmd interactive. Utilisez toujours
exit
. Si vous utilisez Ctrl-C, la session psexec restera active sur l’ordinateur distant.
Installation de logiciels à distance
Vous pouvez utiliser PsExec comme un outil de déploiement logiciel basique. Peut-être avez-vous un programme d’installation MSI que vous devez exécuter sur un ou plusieurs ordinateurs distants appelé setup.msi. Cet installateur doit être copié sur les ordinateurs distants, puis exécuté avec l’utilitaire msiexec.exe et quelques options.
Voici un exemple de la façon dont vous pourriez utiliser PsExec pour déployer un logiciel à distance. Cet exemple copie setup.msi sur l’ordinateur distant, puis lance l’installateur MSI en mode interactif en tant que compte SYSTEM.
Accepter les conditions de licence sans l’option /accepteula
Comme mentionné précédemment, la première fois que PsExec est exécuté, vous devrez accepter un contrat de licence. Vous pouvez utiliser l’option /accepteula
, mais vous pouvez également le « mettre en scène » dans le registre.
Lorsqu’il est lancé pour la première fois, PsExec crée une clé de registre à l’emplacement suivant : HKCU\Software\Sysinternals\PsExec. Au lieu de cette clé de registre, il crée une valeur de registre appelée EulaAccepted avec une valeur DWORD de 1.
En utilisant votre méthode préférée pour modifier le registre sur des ordinateurs distants, vous devez simplement créer cette clé/valeur sur les ordinateurs sur lesquels vous souhaitez exécuter PsExec. Une fois créée, plus besoin d’exécuter /accepteula
!
Combinaison de PowerShell et PsExec
Avant PowerShell, tout ce que nous avions était PsExec. Maintenant, nous avons des options. PowerShell peut remplacer PsExec dans de nombreuses situations, mais le compléter dans d’autres.
Construction de noms d’ordinateurs avec PowerShell
Au lieu d’utiliser \\*
pour trouver tous les ordinateurs du domaine, vous pouvez utiliser PowerShell à la place. En utilisant PowerShell, vous pouvez non seulement sélectionner certains ordinateurs, mais vous n’avez pas besoin d’utiliser le comportement net view /all
sensible au pare-feu.
Vous pouvez utiliser PowerShell pour créer une chaîne contenant tous les noms d’ordinateurs séparés par une virgule. Vous pouvez ensuite transmettre cette chaîne à PsExec qui les traitera joyeusement comme si vous les aviez saisis manuellement.
Vous pouvez voir ci-dessous un exemple d’utilisation de la cmdlet Get-AdComputer
faisant partie du module ActiveDirectory PowerShell.
Activation de la prise en charge de PowerShell à distance
Si vous préférez utiliser PowerShell à distance avec des ordinateurs distants plutôt que PsExec, vous pouvez les activer à l’aide de PsExec.
En exécutant la commande Enable-PSRemoting
ou le fichier batch winrm.cmd sur des ordinateurs distants, vous pouvez rapidement activer PowerShell à distance sur plusieurs ordinateurs en même temps.
Vous pouvez voir ci-dessous un exemple d’appel du fichier batch winrm.cmd sur un ordinateur distant s’exécutant sous le compte SYSTEM. Comme la sortie de cette commande n’est pas nécessaire, elle est silencieuse avec 2>&1> $null
.
Messages d’erreur PsExec
Il est important de mentionner à nouveau que la plupart des codes d’erreur que vous voyez renvoyés par PsExec proviennent du processus distant, pas de PsExec lui-même. Cependant, il est utile de comprendre ces codes d’erreur et ce qu’ils peuvent signifier.
Si vous souhaitez consulter une référence sur tous les codes d’erreur Windows, je vous recommande de consulter cette liste exhaustive des codes d’erreur Windows.
Voici une liste des codes d’erreur courants que vous pouvez voir renvoyés par 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 |
Vos commentaires
Les guides ultimes de l’ATA sont grands. Il y a beaucoup d’informations dans ceux-ci et il est possible que je passe à côté de quelque chose ou que je fasse une erreur. Si vous remarquez quelque chose de faux ou pensez qu’il faudrait ajouter quelque chose à ce guide, veuillez me le faire savoir via les commentaires. Je serais heureux de vous créditer dans l’article.
Crédits
- Merci à Mathias (commentaires) pour de nombreux retours.