Als er een opdrachtregelhulpprogramma zou zijn dat kan concurreren met robocopy wat betreft nut, dan is het PsExec. Het Sysinternals PsExec-hulpprogramma is net zo alomtegenwoordig als ze komen in de gereedschapskist van een IT-beheerder. Met deze tool kunnen beheerders op afstand opdrachten uitvoeren alsof ze zich op de lokale computer bevinden.
Om het PsExec-hulpprogramma uitgebreid te behandelen, was het passend om dit begeerde hulpprogramma te behandelen in een ATA Ultimate Guide. In deze gids leert u wat psexec is, waar het toe in staat is en vele voorbeelden van hoe u deze nuttige tool kunt gebruiken.
Wat is PsExec.exe?
Als u nieuw bent in de IT of wellicht nog niet de behoefte hebt gehad om opdrachten en tools op externe computers uit te voeren, weet u misschien niet wat psexec is.
PsExec of psexec.exe is een opdrachtregelhulpprogramma dat is gebouwd voor Windows. Het stelt beheerders in staat programma’s uit te voeren op lokale en veelvoorkomend externe computers. Het is een gratis hulpprogramma, onderdeel van de Sysinternals pstools-suite die vele jaren geleden is gebouwd door Mark Russinovich.
Het is ontwikkeld om tools zoals telnet te vervangen die je dwongen poorten open te zetten en beveiligingskwetsbaarheden introduceerden. Tegenwoordig hebben we andere opties zoals PowerShell Remoting en de Invoke-Command
PowerShell-cmdlet, maar PsExec heeft nog steeds zijn plaats.
PsExec maakt volledige interactiviteit mogelijk voor consoletoepassingen zonder dat er software geïnstalleerd hoeft te worden. Zoals u zult zien in deze Ultieme Gids, kan PsExec interactieve opdrachtpromptvensters starten, als lokale systeem op externe computers worden uitgevoerd, opdrachten op meerdere computers tegelijk worden uitgevoerd en nog veel meer.
Het ondersteunt alle versies van Windows sinds Windows XP. Dat betekent dat ja, PsExec ook werkt op Windows 10. Het is een eenvoudige tool die werkt op bijna alles, maar verwar de eenvoud niet met de mogelijkheden ervan!
Vereisten
U moet eenvoudigweg een moderne versie van het Windows-besturingssysteem op uw lokale computer hebben om PsExec te kunnen uitvoeren. U wilt echter psexec uitvoeren op externe computers. Om dat te kunnen doen, moet u ervoor zorgen dat een aantal zaken op hun plaats zijn.
Als u deze zaken nu nog niet heeft geregeld of als u twijfelt, geen zorgen. In het volgende gedeelte zullen we bespreken hoe u wat PowerShell kunt schrijven om uw externe computers te testen.
- A modern Windows computer (local)
- Bestands- en printerdeling open (externe computer, TCP-poort 445)
- De admin$ beheershare beschikbaar (externe computer)
- U kent de referenties van een lokaal account (externe computer)
Op het moment van schrijven is PsExec versie 2.2 en dit is de versie waar u in dit artikel meer over zult leren.
PsExec installeren (met instellingen voor externe computer)
Technisch gezien hoef je PsExec niet te installeren omdat het slechts een command-line hulpprogramma is, maar het komt dicht genoeg in de buurt. Aangezien er geen installatie nodig is, hoef je het alleen maar te downloaden en uit te pakken uit het PsTools-zipbestand. PsExec is niet beschikbaar als een op zichzelf staand hulpprogramma en maakt deel uit van de PsTools-suite van tools.
Downloaden van PSExec
Je kunt het ZIP-bestand handmatig uitpakken of hier is een handig PowerShell-script om PsExec te downloaden en uit te pakken uit het pstools-zipbestand. Houd er rekening mee dat dit alle andere PsTools-tools verwijdert. Veel ervan zijn nog steeds handig, maar we zullen ze in dit artikel niet behandelen.
Configuratie van de externe computer
Zodra je PsExec hebt gedownload, moet je ervoor zorgen dat elke externe computer waarop je het wilt uitvoeren open is. PsExec heeft eenvoudige vereisten; het inschakelen van “Bestands- en printerdeling” en het beschikbaar hebben van de “admin$” beheerdershare.
Je kunt naar alle externe computers gaan, het “Windows Firewall”-applet openen, naar “Toegestane apps” gaan en “Bestands- en printerdeling” inschakelen op alle computers zoals je hieronder ziet.
Houd er rekening mee dat “Bestands- en printerdeling” een bekend beveiligingsrisico is, dus zorg ervoor dat alleen het “Prive” firewallprofiel is ingeschakeld.

Of je kunt naar elke computer gaan en het netsh-hulpprogramma uitvoeren om het via de opdracht:
Of je kunt de cmdlet Set-NetFirewallRule
van PowerShell gebruiken om dit te doen.
Als je liever niet naar elke computer gaat, heb je PowerShell Remoting beschikbaar en ben je in een Active Directory-domein, dan kun je ook de firewall op veel computers tegelijk openen met behulp van de Invoke-Command
cmdlet.
Met behulp van PsExec
Voordat je kunt rennen, moet je eerst leren lopen. Als je PsExec nog nooit eerder hebt gebruikt, staat je een traktatie te wachten! Zorg ervoor dat je dit gedeelte eerst leest om de basisprincipes onder de knie te krijgen voordat je later in dit artikel dieper ingaat op de materie.
De eerste keer dat je PsExec op een nieuw systeem uitvoert, zie je meteen de PsExec-licentieovereenkomst verschijnen. Je moet op de Akkoord-knop klikken om het te kunnen gebruiken.

Als je de licentieovereenkomst wilt voorkomen, kun je deze stilzwijgend accepteren met behulp van de /accepteula
-schakelaar zoals hieronder weergegeven.
Je leert later in het artikel een paar trucs om deze EULA-pop-up op lokale en externe computers te onderdrukken.
Hulp vinden
Als je PsExec verkent, moet je helemaal geen schakelaar gebruiken. Wanneer je eenvoudigweg psexec uitvoert zonder schakelaars, worden alle opties weergegeven samen met een korte uitleg van wat elke optie doet. Alle opties staan in de onderstaande tabel voor jouw gemak.
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. |
Het uitvoeren van een eenvoudig extern commando
Op zijn meest basale niveau vereist PsExec twee parameters: een computernaam en een uit te voeren opdracht. Als je een opdracht hebt die op de externe computer moet worden uitgevoerd en geen argumenten vereist, zoals hostname
, kun je deze eenvoudig toevoegen na de computernaam.
Houd er rekening mee dat als je geen volledig bestandspad opgeeft, de uit te voeren opdracht zich in het gebruikers- of systeempad moet bevinden. Als je een programma hebt met spaties in de naam, kun je het programma altijd tussen aanhalingstekens plaatsen zoals “mijn applicatie.exe”.
Je kunt hieronder zien dat om de opdracht hostname
op de computer CONTOSODC1 uit te voeren, je het UNC-pad ervan definieert, gevolgd door de opdracht. PSExec maakt vervolgens veilig verbinding met de externe computer, voert de opdracht uit en geeft de uitvoer terug. In dit geval gaf de hostname
-opdracht de hostnaam van de computer terug, namelijk CONTOSODC1.
Als de opdracht niet cmd
of een andere console is, zal PsExec snel de externe sessie afsluiten en de exitcode retourneren die de externe proces heeft geretourneerd.
Let op: De fout- of exitcode die wordt geretourneerd door psexec komt niet van PsExec zelf. Het komt in plaats daarvan van de opdracht die psexec heeft uitgevoerd op de externe computer.

Hoe PsExec werkt op externe computers
PsExec doorloopt een paar stappen om programma’s op externe computers uit te voeren.
- Maak een bestand genaamd PSEXESVC.exe in C:\Windows.
- Maak en start een Windows-service op de externe computer met de naam PsExec.
- Voer het programma uit als een ouderproces van psexesvc.exe.
- Wanneer voltooid, wordt de PsExec Windows-service gestopt en verwijderd.
Als het proces niet 100% correct werkt, moet u mogelijk handmatig de service verwijderen met behulp van het sc-commando.
Het uitvoeren van een eenvoudig lokaal commando
Hoewel PsExec het bekendst is om commando’s op externe computers uit te voeren, kunt u ook commando’s lokaal uitvoeren.
U kunt commando’s lokaal uitvoeren door eenvoudigweg geen computernaam op te geven zoals hieronder.
Waarom zou u dit doen? Een reden zou zijn om commando’s uit te voeren als de lokale SYSTEM-account. U kunt de -s
-schakelaar gebruiken om elk commando als SYSTEM lokaal of op afstand uit te voeren, zoals u later zult leren.
Bekijk de korte video hieronder. Merk op dat u eenvoudigweg de -s
-schakelaar samen met de opdrachtinterpreter-uitvoerbare bestand moet opgeven om psexec een nieuwe opdrachtsessie te laten starten als NT AUTHORITY\SYSTEM.

PsExec-commando’s (geavanceerdere opties)
Zodra u de basisprincipes onder de knie heeft, kunt u meer geavanceerde technieken leren in psexec. PsExec kan veel meer dan alleen een enkel commando op een enkele computer uitvoeren.
Het uitvoeren van commando’s op meerdere computers
PsExec is niet alleen beperkt tot het uitvoeren van commando’s op één externe computer tegelijk. Deze tool biedt ook ondersteuning om programma’s te kopiëren en commando’s op meerdere computers tegelijk uit te voeren.
U kunt PsExec op meerdere computers tegelijk uitvoeren op verschillende manieren.
Computernamen gescheiden door komma’s.
Normaal gesproken, wanneer u een opdracht uitvoert op een enkele externe computer, geeft u een enkele computernaam op zoals \\REMOTECOMPUTER
. U kunt ook meerdere computers opgeven, gescheiden door komma’s zoals hieronder.
Alle computers in een Active Directory-domein
Als u PsExec gebruikt op een computer die is aangesloten bij een Active Directory-domein en u wilt een opdracht uitvoeren op alle computers in dat domein, gebruikt u een wildcard.
PsExec zal uw gehele Active Directory-domein doorzoeken en proberen een opdracht uit te voeren op elke computer. Hieronder staat een voorbeeldsyntax van hoe PsExec zal proberen verbinding te maken met elke computer in het domein waarvan de uitvoerende computer deel uitmaakt en de opdracht hostname
zal uitvoeren.
Houd er rekening mee dat als u een asterisk (*) gebruikt om alle computers in een domein te vinden terwijl de lokale computer deel uitmaakt van een werkgroep, u de foutmelding
Er is een systeemfout opgetreden: 6118
ontvangt.
Het gebruik van een wildcard dwingt PsExec in feite om de opdracht net view /all
uit te voeren om eerst alle computers in het domein te vinden. Dit is een verouderde manier om computerinformatie te vinden vanwege de afhankelijkheid van NetBIOS.
Gegevens uit een bestand lezen
Een andere manier om opdrachten tegelijkertijd op meerdere computers uit te voeren, is door een tekstbestand te gebruiken. Met behulp van de syntaxis @<bestandsnaam.txt>
zal PsExec elke regel in het tekstbestand lezen alsof het een computernaam is. Vervolgens zal het elke computer afzonderlijk verwerken.
Hieronder ziet u een voorbeeld van het gebruik van PowerShell om een tekstbestand te maken met regelgescheiden computernamen en dit als invoer te gebruiken voor psexec.
Lokale programma’s kopiëren naar de externe computer
Met de -c
schakelaar kopieert psexec elk lokaal programma naar de externe computer voordat het wordt uitgevoerd.
Misschien heb je een EXE-bestand op je lokale computer in een C:\Tools map en wil je het uitvoeren op een externe computer. Je kunt dit doen met de volgende syntaxis:
Als je de -c
schakelaar gebruikt en geen uitvoerbaar bestand opgeeft, zal PsExec het bestand nog steeds kopiëren, maar je krijgt een foutmelding waarin staat het systeem kan het opgegeven bestand niet vinden. Dit gebeurt omdat PsExec altijd probeert het gekopieerde bestand uit te voeren.
Als je bestanden naar externe computers moet kopiëren voordat je PsExec gebruikt, gebruik dan in plaats daarvan de Copy-Item
PowerShell-cmdlet.
Het uitvoeren van externe processen onder alternatieve referenties
Nog een populair gebruik van PsExec is het uitvoeren van opdrachten onder alternatieve accounts. Standaard zal PsExec proberen verbinding te maken met de externe computer onder je momenteel ingelogde account. Meer specifiek zal het je account nabootsen op de externe computer.
Met behulp van de -u
en optionele -p
schakelaars kun je verbinding maken met de externe computer met een alternatief gebruikersaccount. PsExec versleutelt vervolgens zowel de gebruikersnaam als het wachtwoord en stuurt ze naar de externe computer voor verificatie.
Bijvoorbeeld, als je in een werkgroep zit, moet je altijd de gebruikersnaam opgeven om te verifiëren bij de externe computer.
Als beide computers lid zijn van Active Directory, zorg er dan voor dat je het gebruikersaccount voorafgaat met de domeinnaam.
Let op dat wanneer je de -u
schakelaar niet gebruikt, psexec je ingelogde account nabootst op de externe computer. Het zal geen toegang hebben tot netwerkbronnen.
Processen uitvoeren als de LOCAL SYSTEM-account
Een van de meest nuttige functies van het uitvoeren van PsExec onder een alternatief account is het gebruik van de -s
schakelaar. Deze schakelaar maakt het mogelijk dat PsExec (en je op afstand uitgevoerde applicatie) wordt uitgevoerd onder de LOCAL SYSTEM-account van de externe (of lokale) computer.
Let op dat ik hieronder geen computernaam heb opgegeven. PsExec kan net zo goed op de lokale computer worden uitgevoerd. In dit geval gebruik ik de -s
optie om PsExec te vertellen om een lokale opdrachtprompt te starten als de LOCAL SYSTEM-account.

Om een opdrachtprompt als LOCAL SYSTEM op een externe computer uit te voeren, voeg je de computernaam toe aan de verwijzing zoals hieronder:
GUI-toepassingen op afstand starten
Nog een handige schakelaar van PsExec is -i
. Standaard staat PsExec niet toe dat de op afstand uitgevoerde opdracht vensters opent op de externe computer. Dit is handig omdat je het scherm toch niet zult zien als je opdrachten op afstand uitvoert.
Maar misschien moet je programma’s openen voor je gebruikers. Jijzelf zult de toepassing niet gebruiken, maar een eindgebruiker wel. In dat geval gebruik je de -i
schakelaar.
Misschien moet je een notepad-venster openen op een externe computer. Geen probleem. Voer notepad.exe uit met de -i
schakelaar en PsExec opent Notepad.

Zorg er ook voor dat je de -d
optie gebruikt om los te koppelen wanneer het interactieve venster wordt geopend. Standaard wacht PsExec tot het uitgevoerde proces is voltooid. Als het externe proces (Notepad in dit geval) actief blijft, zal PsExec nooit de controle teruggeven.
Het gebruik van de -d
optie met -i
vertelt PsExec om niet te wachten tot het externe proces is voltooid. In plaats daarvan verbreekt het de verbinding en geeft het de controle terug zodra het externe proces is uitgevoerd.
Doorsturen van Output
Psexec stuurt elke uitvoer die van het externe proces wordt ontvangen naar je lokale sessie. Normaal gesproken gaat deze uitvoer rechtstreeks naar je lokale console. Maar als je het wilt doorsturen, kun je dit doen met behulp van de gebruikelijke doorstuuroperators.
Als je bijvoorbeeld een opdracht wilt uitvoeren en alle uitvoer wilt dempen, kun je de uitvoer en fouten doorsturen naar null met behulp van ^> nul ^2^&1
.
Let op dat de speciale tekens worden ontsnapt met een dakje. (
^
).
Psexec Gebruiksscenario’s
Zodra je hebt geleerd hoe je psexec moet gebruiken, kom je onvermijdelijk verschillende specifieke gebruiksscenario’s tegen. In dit gedeelte leer je enkele praktijkvoorbeelden en voorbeelden van het gebruik van psexec.
Een externe opdrachtprompt starten (psexec cmd
)
Een van de meest voorkomende gebruiksscenario’s is het starten van PsExec als een interactieve opdrachtprompt. PsExec voert niet alleen opdrachten op afstand uit, maar kan ook de uitvoer van opdrachten terugsturen naar uw console. Hierdoor kan het een geweldige telnet (als iemand dat nog steeds gebruikt) of mogelijk een vervanging zijn voor PowerShell Enter-PSSession
.
Om een externe opdracht te starten, geeft u de naam van de externe computer op en voert u de applicatie cmd uit. Cmd is de Windows-opdrachtinterpreter. Aangezien PsExec interactief gebruik ondersteunt, zal het graag een knipperende cursor en een prompt retourneren.

Op dit punt is de wereld aan uw voeten. U kunt opdrachten uitvoeren op uw lokale computer via deze “geneste” opdrachtprompt en ze zullen worden uitgevoerd op de externe computer.
Om af te sluiten vanuit de opdrachtprompt typt u exit
. PsExec stopt het proces cmd
op de externe computer en geeft de focus terug aan de lokale computer.
Gebruik NOOIT Ctrl-C om een interactieve cmd-sessie af te sluiten. Gebruik altijd
exit
. Als u Ctrl-C gebruikt, blijft de psexec-sessie actief op de externe computer.
Op afstand software installeren
U kunt PsExec gebruiken als een eenvoudige tool voor het implementeren van software. Misschien heeft u een MSI-installatieprogramma dat u moet uitvoeren op één of meer externe computers met de naam setup.msi. Dit installatieprogramma moet worden gekopieerd naar de externe computers en vervolgens worden uitgevoerd met het hulpprogramma msiexec.exe met een paar schakelaars.
Hieronder volgt een voorbeeld van hoe u PsExec kunt gebruiken om software op afstand te implementeren. Dit voorbeeld kopieert setup.msi naar de externe computer en start vervolgens de MSI-installateur interactief op als de SYSTEM-account.
Door de EULA te accepteren zonder de /accepteula
-schakelaar
Zoals eerder vermeld, moet u de eerste keer dat PsExec wordt uitgevoerd een EULA accepteren. U kunt de /accepteula
-schakelaar gebruiken, maar u kunt deze ook “stagen” in het register.
Wanneer PsExec voor de eerste keer wordt gestart, maakt het een registersleutel aan op HKCU\Software\Sysinternals\PsExec. In plaats van die registersleutel maakt het een registerwaarde genaamd EulaAccepted aan met een DWORD-waarde van 1.
Met uw favoriete methode om het register op externe computers te wijzigen, hoeft u alleen deze sleutel/waarde op computers aan te maken waarop u PsExec wilt uitvoeren. Eenmaal gemaakt, hoeft u /accepteula
niet meer uit te voeren!
PowerShell en PsExec combineren
Voor PowerShell hadden we alleen PsExec. Nu hebben we opties. PowerShell kan PsExec in veel situaties vervangen, maar ook aanvullen in andere situaties.
Computernamen opbouwen met PowerShell
In plaats van \\*
te gebruiken om alle computers in het domein te vinden, kunt u in plaats daarvan PowerShell gebruiken. Met behulp van PowerShell kunt u niet alleen bepaalde computers selecteren, maar u hoeft ook niet de firewall-gevoelige net view /all
-gedrag te gebruiken.
U kunt PowerShell gebruiken om een tekenreeks te maken met alle computernamen gescheiden door een komma. U kunt die tekenreeks vervolgens doorgeven aan PsExec, die elk van hen vrolijk zal verwerken alsof u ze handmatig hebt getypt.
Hieronder ziet u een voorbeeld van het gebruik van de Get-AdComputer
cmdlet, onderdeel van de ActiveDirectory PowerShell-module.
Het op afstand inschakelen van PowerShell Remoting
Als u liever PowerShell Remoting wilt gebruiken voor externe computers in plaats van PsExec, kunt u PsExec gebruiken om ze in te schakelen.
Door Enable-PSRemoting
of het winrm.cmd batchbestand uit te voeren op externe computers, kunt u snel PowerShell Remoting inschakelen op meerdere computers tegelijk.
Hieronder ziet u een voorbeeld van het aanroepen van het winrm.cmd batchbestand op een externe computer die wordt uitgevoerd als de SYSTEM-account. Omdat de uitvoer van die opdracht niet nodig is, wordt deze onderdrukt met 2>&1> $null
.
PsExec-foutmeldingen
Het is de moeite waard om opnieuw te vermelden dat de meeste foutcodes die u ziet terugkomen van PsExec afkomstig zijn van het externe proces, niet van PsExec zelf. Maar het is handig om een begrip te hebben van deze foutcodes en wat ze kunnen betekenen.
Als u een referentie wilt hebben van alle Windows-foutcodes, raad ik u aan deze uitgebreide lijst met Windows-foutcodes te bekijken.
Hieronder vindt u een lijst met veelvoorkomende foutcodes die u mogelijk terugkrijgt van 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 |
Uw feedback
ATA Ultimate Gidsen zijn groots. Er is veel informatie in deze gidsen en het is mogelijk dat ik iets over het hoofd zie of een fout maak. Als je iets verkeerds opmerkt of denkt dat er iets aan deze gids moet worden toegevoegd, laat het me dan weten via de opmerkingen. Ik zou je graag willen vermelden in de post.
Vermeldingen
- Dank aan Mathias (opmerkingen) voor talloze feedback.