Commande à distance. Exécution de commandes de console sur des ordinateurs distants via un réseau

PsExec est un utilitaire pour exécution à distance commandes

L'exécution de commandes sur un ordinateur distant est une tâche assez courante. Cela peut être nécessaire pour modifier les paramètres du système, installer ou supprimer des programmes, et bien plus encore. Pour résoudre de tels problèmes, il existe un certain nombre d'outils différents, allant de systèmes logiciels sérieux tels que System Center Configuration Manager à de modestes utilitaires de ligne de commande. L'un de ces utilitaires sera abordé dans cet article.

L'utilitaire PsExec fait partie du package PsTools de Sysinternals. Il vous permet d'exécuter des commandes sur des ordinateurs distants et ne nécessite aucune installation sur le système. Pour utiliser l'utilitaire, copiez-le simplement dans le dossier contenant les fichiers exécutables (par exemple, C:\Windows\system32) et exécutez-le à partir de n'importe quel shell de ligne de commande : Cmd ou PowerShell.
Le principe du programme est le suivant: dans les ressources du fichier exécutable PsExec.exe, il existe un autre fichier exécutable - PSEXESVC, qui est un service Windows. Avant d'exécuter la commande, PsExec décompresse cette ressource dans le dossier administratif caché de l'ordinateur distant Admin$ (C:\Windows), dans le fichier C:\Windows\system32\psexesvc.exe.

Noter. Si vous utilisez la clé -c dit au programme de copier les fichiers exécutables sur ce système, ils seront également copiés dans ce dossier.

Une fois la copie terminée, PsExec installe et démarre le service à l'aide de l'API des fonctions Windows pour gérer les services. Ensuite, après le démarrage de PSEXESVC, une connexion est établie entre celui-ci et PsExec pour le transfert de données (saisie des commandes et réception des résultats). Une fois terminé, PsExec arrête le service et le supprime de l'ordinateur cible.

La syntaxe de PsExec est la suivante :

psexec \\ordinateur [-u utilisateur [-p mot de passe]] programme [arguments]

Le nom d'utilisateur et le mot de passe peuvent être omis, auquel cas le processus distant s'exécutera sous le même compte que le programme PsExec. Cependant, étant donné que le processus distant est un emprunt d'identité, il n'aura pas accès aux ressources réseau sur le système distant. Si vous spécifiez un nom d'utilisateur, le processus distant démarrera sous le compte spécifié et aura accès aux mêmes ressources réseau du système distant que le compte donné. Cependant, gardez à l'esprit que le mot de passe est envoyé au système distant en texte clair.

A titre d'exemple, vidons le cache DNS sur l'ordinateur distant SRV1 :

psexec \\SRV1 ipconfig /flushdns

La commande sera exécutée sur l'ordinateur SRV1 sous vos informations d'identification. Une fois ipconfig terminé, toutes les sorties de texte seront envoyées à votre ordinateur, plus un code d'erreur sera renvoyé. Si la commande a réussi, ce sera 0.

Si vous devez exécuter plusieurs commandes, il est préférable d'établir une session interactive avec l'ordinateur distant. Pour ce faire, entrez la commande psexec \\SRV1 cmd. Désormais, les commandes saisies sur l'ordinateur local seront exécutées sur l'ordinateur distant SRV1.


PsExec vous permet d'exécuter une commande sur plusieurs ordinateurs en même temps. Pour ce faire, vous pouvez entrer des noms d'ordinateurs séparés par des virgules : psexec \\SRV1,SRV2 ou enregistrez-les dans un fichier texte puis précisez son adresse : psexec@c:\comp.txt. Si à la place du nom de l'ordinateur vous mettez un astérisque, comme ceci : psexec \\*, la commande sera exécutée sur tous les ordinateurs du domaine.


Et une autre façon intéressante d'utiliser l'utilitaire PsExec. Si vous ne spécifiez pas de nom d'ordinateur, la commande s'exécute par défaut sur le système local. Utilisation de la clé -s vous pouvez exécuter des programmes sous le compte système. Par exemple, démarrons une session en ligne de commande : psexec -s cmd puis la commande qui suis je Vérifions sous quel utilisateur nous travaillons actuellement. Cette fonctionnalité peut être utile pour déboguer des programmes ou accéder aux clés de registre SAM et SECURITY cachées.


Eh bien, quelques mots sur les clés du programme. Je ne vais pas tout décrire, je vais vous parler des plus intéressants :

Le programme spécifié est copié sur le système distant pour exécution. Par example:

psexec \\SRV1 -c test.exe

Si ce paramètre n'est pas défini, l'application doit se trouver dans le dossier système de l'ordinateur distant. Si un tel programme existe déjà sur l'ordinateur distant et ne se trouve pas dans le répertoire système, vous devez alors spécifier son chemin d'accès complet (si le nom du programme contient des espaces, il doit être placé entre guillemets) :

psexec \\SRV1 "c:\program files\test.exe"

Si avec la clé -c utiliser la clé -F alors même si le programme est déjà sur le système distant, il sera écrasé. Et avec une clé -v il ne sera écrasé que si la version copiée du programme est plus récente que celle installée sur le système.

Fonctionnement du programme en mode interactif. Par défaut, PsExec exécute les commandes en mode furtif, c'est-à-dire qu'aucune fenêtre ou boîte de dialogue n'est affichée sur le système où la commande est exécutée. Cependant, il existe une option pour changer cela avec la clé -je. Après cela, vous pouvez spécifier le numéro de la session dans laquelle afficher les fenêtres, ou vous ne pouvez pas le spécifier, puis l'interface sera affichée dans la session de la console.

Spécifie de ne pas attendre la fin de l'application. Dans ce cas, nous ne recevrons pas de données de sortie de l'utilitaire de console, mais nous pourrons exécuter les suivants sans attendre la fin de la commande précédente. Ce paramètre ne doit être utilisé que lors de l'exécution d'applications non interactives.

Utilisé pour exécuter le programme en . Peut être requis dans systèmes d'exploitation Windows Vista et supérieur pour exécuter certains programmes qui modifient les paramètres système (par exemple, regedit).

Et avec l'aide de cette clé, au contraire, vous pouvez réduire l'autorité. Lorsque le processus démarre, l'utilisateur, qu'il appartienne ou non au groupe Administrateurs, se voit accorder des droits limités (les droits du groupe "Administrateurs" sont annulés et l'utilisateur ne reçoit que les droits attribués au groupe "Utilisateurs"). .

Complet Informations d'arrière-planà peu près toutes les clés du programme peuvent être obtenues en entrant simplement la commande psexec dans ligne de commande sans paramètres.

Des utilitaires tels que Telnet et des programmes de gestion à distance tels que PC Anywhere de Symantec vous permettent d'exécuter des programmes sur des systèmes distants, mais ils ne sont pas aussi faciles à installer car vous devez également installer un client Logiciel sur les systèmes distants auxquels il est nécessaire d'accéder. PsExec est une version allégée de Telnet. Il vous permet d'exécuter des processus sur des systèmes distants avec toute la puissance d'une interface d'application de console interactive sans avoir à installer manuellement le logiciel client. Le principal avantage de PsExec est la possibilité d'invoquer de manière interactive une interface de ligne de commande sur des systèmes distants et d'exécuter à distance des outils tels que IpConfig. C'est le seul moyen d'afficher des informations sur un système distant sur l'écran de l'ordinateur local.

Noter. Certains antivirus signalent qu'un ou plusieurs de ces programmes sont infectés par le virus "Remote admin". Aucun des programmes inclus dans la suite PsTools ne contient de virus, mais ils ont été utilisés par des virus, ce qui est à l'origine de ces avertissements.

Installation

Copiez simplement le programme PsExec dans le dossier exécutable. Lorsque vous entrez la commande psexec, une aide sur la syntaxe de la commande s'affiche.

PsExec fonctionne sur les systèmes d'exploitation Windows Vista, NT 4.0, Win2000, Windows XP et Server 2003, y compris les versions de système d'exploitation 64 bits

Usage

Un article de Mark Russinovich dans le numéro de juillet 2004 de Windows IT Pro Magazine décrit des méthodes supplémentaires pour travailler avec le programme. psexec.

utilisation : psexec [\\ordinateur[,ordinateur2[,...] | @fichier][-u utilisateur [-p mot de passe]][-n s][-l][-s|-e][-x][-i [session]][-c [-f|-v]] [-w répertoire][-d][-<приоритет>][-a n,n,... ] programme [arguments]

un ordinateur

Indique à PsExec d'exécuter l'application sur le ou les ordinateurs spécifiés. Si le nom de l'ordinateur n'est pas spécifié, PsExec exécutera l'application sur le système local ; si un astérisque (\\*) est spécifié à la place du nom de l'ordinateur, PsExec exécutera l'application sur tous les ordinateurs du domaine actuel.

@dossier

Indique à PsExec d'exécuter l'application sur tous les ordinateurs répertoriés dans le fichier texte spécifié.

Les processeurs sur lesquels l'application peut être exécutée sont séparés par des virgules et les processeurs sont numérotés à partir de 1. Par exemple, pour exécuter l'application sur les processeurs deux et quatre, tapez "-a 2,4"

Le programme spécifié est copié sur le système distant pour exécution. Si ce paramètre n'est pas défini, l'application doit se trouver dans le dossier système du système distant.

Spécifie de ne pas attendre la fin de l'application. Ce paramètre ne doit être utilisé que lors de l'exécution d'applications non interactives.

Le profil de compte spécifié n'est pas chargé.

Le programme spécifié est copié sur le système distant, même si le fichier existe déjà sur le système distant.

Le programme exécuté accède au bureau de la session spécifiée sur le système distant. Si session n'est pas défini, le processus s'exécute dans une session de console.

Lorsque le processus démarre, l'utilisateur se voit accorder des droits limités (les droits du groupe Administrateurs sont révoqués et l'utilisateur ne reçoit que les droits attribués au groupe Utilisateurs). Sous Windows Vista, le processus commence par niveau faible fiabilité.

Permet de définir le délai de connexion aux ordinateurs distants (en secondes).

Vous permet de spécifier un mot de passe facultatif pour le nom d'utilisateur. Si ce paramètre est omis, vous serez invité à saisir un mot de passe et le mot de passe ne s'affichera pas à l'écran.

Le processus distant s'exécute à partir du compte système.

Vous permet de spécifier un nom d'utilisateur facultatif pour vous connecter au système distant.

Le fichier spécifié est copié sur le système distant au lieu de celui existant uniquement si son numéro de version est supérieur ou plus récent.

Vous permet de spécifier un répertoire de travail (chemin dans le système distant) pour le processus.

Affiche l'interface utilisateur sur le bureau Winlogon (système local uniquement).

-une priorité(une priorité)

Vous permet de définir différentes priorités pour le processus : -low (faible), -belownormal (inférieur à la moyenne), -abovenormal (au-dessus de la moyenne), -high (élevé) ou -realtime (temps réel).

programme

Nom du programme à exécuter.

arguments

Arguments à transmettre (notez que les chemins de fichiers doivent être spécifiés en tant que chemins locaux sur le système cible).

Pour spécifier un nom d'application qui contient des espaces, utilisez des guillemets, tels que psexec \\marklap "c:\longname\app.exe". Les données saisies sont transférées vers le système distant lorsque vous appuyez sur la touche "Entrée". Pour terminer le processus à distance, vous devez appuyer sur la combinaison de touches Ctrl-C.

Si aucun nom d'utilisateur n'est spécifié, le processus distant s'exécute sous le même compte que le programme PsExec. Cependant, étant donné que le processus distant est un emprunt d'identité, il n'aura pas accès aux ressources réseau sur le système distant. Si un nom d'utilisateur est spécifié, le processus distant s'exécute sous le compte spécifié et accède aux mêmes ressources réseau sur le système distant que le compte. Notez que le mot de passe est envoyé au système distant en texte clair.

Lors de l'accès au système local, cette version de PsExec peut être utilisée à la place de Runas car PsExec ne nécessite pas de droits d'administrateur.

Exemples

Cette commande invoque une interface de ligne de commande interactive sur le système \\marklap :

psexec \\marklap cmd

Cette commande exécute le programme IpConfig sur le système distant avec l'option /all et affiche les données résultantes sur l'écran du système local :

psexec \\marklap ipconfig /all

Cette commande copie le programme test.exe sur le système distant et l'exécute de manière interactive.

psexec \\marklap -c test.exe

Si un tel programme est déjà installé sur le système distant et ne se trouve pas dans le répertoire système, spécifiez le chemin complet vers ce programme

psexec \\marklap c:\bin\test.exe

Cette commande exécute Regedit de manière interactive à partir du compte système pour afficher les données des clés de registre SAM et SECURITY :

psexec -i -d -s c:\windows\regedit.exe

Cette commande est utilisée pour appeler Programmes Internet Explorer en tant qu'utilisateur limité :

psexec -l -d "c:\program files\internet explorer\iexplore.exe"

Cet article explique comment exécuter des commandes de console sur des ordinateurs distants sur le réseau, certaines commandes très utiles pour les administrateurs système sont données à titre d'exemple.

J'utilise 2 outils d'exécution de commande de console distante : PsExec et WinRM , chacun a ses propres avantages.

psexec

Une des grandes solutions au problème posé dans le titre est d'utiliser le programme PsExec du grand Mark Russinovich.

Le programme fonctionne selon le principe client-serveur : un client s'exécute sur la machine locale, qui envoie des commandes au serveur sur l'ordinateur distant. Une caractéristique de ce programme est que la partie serveur est installée automatiquement juste avant l'exécution de la commande, puis supprimée. Ainsi, pour exécuter des commandes sur des machines distantes, il suffit d'avoir des droits d'administration sur celles-ci.

Si PsExec est exécuté en tant qu'administrateur appartenant au même domaine que l'ordinateur distant, aucune information d'identification n'est même requise. Sinon, ils peuvent être spécifiés sur la ligne de commande, ou PsExec les demandera. PsExec s'exécute sur les systèmes d'exploitation de Windows 2000 à Windows Server 2008 R2 64 bits.

Les fonctionnalités suivantes sont très utiles dans PsExec :

  • Exécuter une commande sur un groupe d'ordinateurs. Exemple : La commande suivante permet de forcer les stratégies de groupe les plus récentes :
    psexec @group.txt gpupdate /force
  • Exécuter des commandes en tant que compte système. Exemple : La commande suivante forcera le système distant à vérifier les mises à jour :
    psexec \\ordinateur -s wuauclt /detectnow
  • Copier un programme en cours d'exécution sur un ordinateur distant avant son exécution. Exemple : la commande suivante mettra à jour l'appartenance de cet ordinateur à un groupe de sécurité Active Directory (jeton d'accès) sans redémarrage :
    psexec \\ordinateur -c -s klist.exe purge

Il est difficile de surestimer l'utilité de ce programme si vous utilisez les scripts et les capacités des commandes de console intégrées à Windows.

Gestion à distance de Windows

Il s'agissait à l'origine d'une technologie de serveur pour la gestion du matériel à distance qui a été introduite dans Windows Server 2003 R2 dans le cadre du composant de gestion du matériel, mais Microsoft a récemment publié le package Windows Management Framework, qui inclut PowerShell 2.0 et WinRM 2.0 et est installé sur les systèmes d'exploitation clients en tant que une mise à jour. Les détails peuvent être trouvés dans l'article KB968929.

La beauté de WinRM réside dans la facilité de déploiement dans un environnement de domaine via WSUS en tant que mise à niveau facultative du système d'exploitation et la puissance associée à l'utilisation de PowerShell.

L'utilisation de WinRM passe par 2 commandes.

winrm.cmd est utilisé pour configurer les paramètres et les diagnostics pour le client et le serveur WinRM.

Pour que le serveur WinRM commence à accepter les commandes, le service de gestion à distance de Windows doit être en cours d'exécution et sa configuration initiale doit être effectuée. Utiliser la commande

winrm quickconfig sur la machine locale, ou une feinte avec les oreilles
psexec -s \\servername winrm quickconfig sur le réseau en utilisant PsExec comme compte système.

Il vous demandera de démarrer automatiquement le service WinRM et d'autoriser les connexions à distance, acceptez ;)

Pour vous connecter avec succès à un serveur WinRM (c'est-à-dire la partie serveur qui accepte les commandes) qui n'est pas inclus dans le même domaine que votre ordinateur client, vous devez ajouter ce serveur cible à la "liste de confiance" sur le client avec les éléments suivants commande:

winrm set winrm/config/client @(TrustedHosts="servername") , où au lieu de servername vous pouvez spécifier une adresse IP, ou * (astérisque).

Pour les utilisateurs de Windows Vista et Windows 7 qui ne s'exécutent pas en tant qu'administrateur intégré (ce qui est généralement le cas), vous devez exécuter la commande suivante

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

Par défaut, il y a une limite de 5 connexions WinRM simultanées à partir d'un client, pour augmenter ce nombre, exécutez la commande

winrm s winrm/config/winrs @(MaxShellsPerUser="X")

winrs.exe- un client pour envoyer des requêtes côté serveur. Exemple : La commande suivante forcera le redémarrage du système distant...

winrs -r: arrêt du nom du serveur /r /t 0

Dans un environnement de domaine, les informations d'identification de l'utilisateur qui a lancé la commande sont utilisées lors de l'envoi des commandes. Pour envoyer des commandes au nom d'un autre utilisateur, les commutateurs -u:user -p:pass sont utilisés. Exemple : La commande suivante effacera le cache local des noms DNS sur le système distant

winrs -r:nomserveur -u:utilisateur -p:pass ipconfig /flushdns