als er een command-line utility was die kon concurreren met robocopy in termen van bruikbaarheid, is het PsExec. De Sysinternals PsExec utility is zo alomtegenwoordig als ze komen in een IT-Admin arsenaal. Met deze tool kunnen beheerders opdrachten op afstand uitvoeren alsof ze op de lokale computer staan.
om de PsExec-tool in de diepte te behandelen, was het passend om deze felbegeerde tool te behandelen in een Ata Ultimate Guide. In deze gids, zult u leren wat psexec is, wat het in staat is om vele voorbeelden van hoe u deze nuttige tool te gebruiken.,
inhoudsopgave
Wat is PsExec.exe?
als je nieuw bent of misschien niet de noodzaak hebt gehad om commando ‘ s en gereedschappen op externe computers uit te voeren, Weet je misschien niet wat psexec is.
PsExec of psexec.exe is een command-line utility gebouwd voor Windows. Hiermee kunnen beheerders programma ‘ s uitvoeren op lokale en vaker externe computers. Het is een gratis hulpprogramma deel van de Sysinternals pstools suite gebouwd door Mark Russinovich vele jaren geleden.,
Het werd gebouwd ter vervanging van tools zoals telnet die je dwong om poorten te openen en beveiligingsproblemen te introduceren. 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 software te hoeven installeren. Zoals u zult zien door middel van deze ultieme gids, PsExec kan interactieve opdrachtprompt starten, draaien als lokaal systeem op externe computers, uitvoeren van opdrachten op meerdere computers tegelijk en meer.,
Het ondersteunt alle versies van Windows sinds Windows XP. Dat betekent, dat ja, PsExec op Windows 10 is een ding te. Het is een eenvoudige tool om te draaien die werkt op bijna alles, maar verwar de eenvoud niet met de mogelijkheden!
vereisten
u hoeft alleen maar een modern Windows-besturingssysteem te gebruiken om PsExec op uw lokale computer te laten draaien. Echter, je gaat willen psexec draaien tegen externe computers. Om dat te doen, je nodig hebt om ervoor te zorgen dat een paar items zijn op zijn plaats.
Als u deze items nu niet op zijn plaats hebt of niet zeker bent, maak u geen zorgen., In de volgende sectie zullen we ingaan op het schrijven van een aantal PowerShell om uw externe computers te testen.
- een moderne Windows-computer (lokaal)
- bestand en Printer delen open (externe computer, tcp-poort 445)
- de admin$ administrative share beschikbaar (externe computer)
- u kent de referenties van een lokaal account (externe computer)
vanaf dit schrijven staat PsExec op v2.2 en zal de versie zijn waarover u in dit artikel zult leren.,
het installeren van PSexec (met Remote Computer Setup)
technisch gezien installeert u PsExec niet omdat het slechts een command-line utility is maar dichtbij genoeg. Omdat er geen installatie nodig is, hoeft u het alleen maar te downloaden en uit het pstools zip-bestand te halen. PsExec is niet beschikbaar als een standalone hulpprogramma en maakt deel uit van de pstools suite van tools.
Downloaden PSExec
u kunt het ZIP-bestand handmatig uitpakken of hier is een handig PowerShell-fragment om PsExec te downloaden en uit het PSTOOLS-ZIP-bestand te halen. Merk op dat dit alle andere PsTools gereedschappen verwijdert., Velen zijn nog steeds handig, maar we zijn niet van plan om die in dit artikel te dekken.
externe Computerconfiguratie
zodra PsExec is gedownload, moet u ervoor zorgen dat elke externe computer waarop u het gaat draaien, open is. PsExec heeft eenvoudige eisen; bestand en Printer delen ingeschakeld en de admin $ administrative share beschikbaar.
u kunt naar alle externe computers gaan, de Windows Firewall-applet openen, naar Toegestane Apps gaan en het delen van bestanden en printers op alle computers inschakelen, zoals u hieronder ziet.,
merk op dat het delen van bestanden en printers een bekend beveiligingsrisico is, dus zorg ervoor dat alleen het privé-firewall-profiel is ingeschakeld.
Of u kunt een bezoek brengen elke computer en voer het hulpprogramma netsh om het te openen via:
> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
Of je kunt gebruik maken van PowerShell s Set-NetFirewallRule
cmdlet om het te doen.,
PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private
Als u liever niet elke computer bezoekt, u hebt PowerShell Remoting beschikbaar en U bevindt zich in een Active Directory-domein, kunt u ook de firewall op veel computers tegelijk openen met behulp van de Invoke-Command
cmdlet.
met behulp van PsExec
voordat u kunt uitvoeren, moet u lopen. Als je nog nooit hebt gebruikt PsExec voor, je bent in voor een traktatie! Zorg ervoor dat u deze sectie eerst te lezen om je voeten nat om de basis te leren voordat springen in het diepe einde later in dit artikel.,
De eerste keer dat u PsExec op een nieuw systeem uitvoert, zult u onmiddellijk de PsExec licentieovereenkomst zien verschijnen. Je moet klikken op de Akkoord knop om te beginnen met het te gebruiken.
Als u wilt voorkomen dat de licentieovereenkomst wordt weergegeven, kunt u deze in stilte accepteren met behulp van de /accepteula
switch zoals hieronder getoond.,
> psexec /accepteula
later in het artikel leer je een paar trucs bij het stilleggen van deze EULA popup op lokale en externe computers.
hulp zoeken
bij het verkennen van PsExec moet u helemaal geen schakelaar gebruiken. Wanneer u gewoon uitvoeren psexec zonder schakelaars, zal het terug alle opties en een korte uitleg van wat elk doet. Alle opties zijn in de onderstaande tabel voor uw gemak.,
Switch | uitleg |
---|---|
-a | afzonderlijke processors waarop de toepassing kan draaien met komma ‘ s waarbij 1 de laagst genummerde CPU is. Bijvoorbeeld, om de toepassing op CPU 2 en CPU 4 uit te voeren, voer je in: “-a 2,4” |
-c | kopieer het opgegeven programma naar het externe systeem voor uitvoering. Als u deze optie weglaat, moet de toepassing zich in het systeempad op het externe systeem bevinden., |
-d | wacht niet tot proces wordt beëindigd (niet-interactief). |
-e | laadt het profiel van het opgegeven account niet. |
– f | kopieer het opgegeven programma, zelfs als het bestand al op het externe systeem bestaat. |
-i | voer het programma zo uit dat het communiceert met het bureaublad van de opgegeven sessie op het externe systeem. Als er geen sessie is opgegeven, wordt het proces uitgevoerd in de consolesessie. Sommigen hebben de beste resultaten altijd met behulp van de-s switch met-i te wijten aan windows onverstaanbaar., |
-h | als het doelsysteem Vista of hoger is, wordt het proc | -l | uitgevoerd als beperkte gebruiker (verwijdert de groep Administrators en staat alleen rechten toe die aan de groep gebruikers zijn toegewezen). Op Windows Vista het proces draait met een lage integriteit. |
– n | geeft een time-out in seconden aan wanneer verbinding wordt gemaakt met externe computers. |
– p | specificeert een optioneel wachtwoord voor de gebruikersnaam. Als u dit weglaat, wordt u gevraagd een verborgen wachtwoord in te voeren., |
– r | specificeert de naam van de externe service die moet worden aangemaakt of waarop interactie moet plaatsvinden. met. |
-s | voer het proces op afstand uit in het systeemaccount. |
-u | specificeert de optionele gebruikersnaam voor het aanmelden bij de computer. |
– v | kopieer het opgegeven bestand alleen als het een hoger versienummer heeft of nieuwer is dan het versienummer op het externe systeem. |
-w | Stel de werkmap van het proces in (relatieve |
– x | Toon de UI op het Winlogon secure desktop (alleen lokaal systeem)., |
– arm | geeft aan dat de externe computer een ARM-architectuur heeft. |
-prioriteit | specificeert-low, – belownormal, -abovenormal,-high of |
– realtime | voer het proces uit met een andere prioriteit. Gebruik |
-achtergrond | uitvoeren met weinig geheugen en I / O-prioriteit op Vista. |
computer | direct PsExec om de toepassing op de opgegeven computer of computers uit te voeren., Als u de computernaam weglaat, voert PsExec de toepassing op het lokale systeem uit en als u een jokerteken opgeeft ( \ * ), voert PsExec | @file | PsExec voert het commando uit op elk van de computers in het bestand. |
– accepteula | deze vlag onderdrukt de weergave van het licentiedialoogvenster. |
– nobanner | geef de opstartbanner en het copyright-bericht niet weer., |
het uitvoeren van een eenvoudige Remote commando
Op zijn meest basale, PsExec vereist twee parameters: een computernaam en een commando uit te voeren. Als u een opdracht op de externe computer wilt uitvoeren waarvoor geen argumenten nodig zijn, zoals hostname
, kunt u deze eenvoudig toevoegen na de computernaam.
merk op dat als u geen volledig bestandspad opgeeft, het uit te voeren commando zich in het Gebruiker-of systeempad moet bevinden., Ook, als je een programma met spaties in de naam, kunt u het programma altijd omsluiten in spaties zoals “mijn toepassing.executable”.
> psexec \\REMOTECOMPUTER hostname
hieronder kunt u zien dat om het hostname
commando op de CONTOSODC1 computer uit te voeren, u het UNC pad definieert dat gevolgd wordt door het commando. PSExec zal dan verbinding maken met de externe computer veilig, het commando uit te voeren en de output terug te keren. In dit geval gaf het commando hostname
de hostnaam terug van de computer die CONTOSODC1 is.,
als het commando niet cmd
of een andere console is, zal PsExec snel de externe sessie verlaten en de afsluitcode teruggeven die het externe proces terugkreeg.
opmerking: de fout of exit code die wordt geretourneerd van psexec komt niet van PsExec zelf. In plaats daarvan, het komt van het commando dat psexec uitgevoerd op de externe computer.,
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.,
als het proces niet 100% correct werkt, moet u de service handmatig verwijderen met het SC Commando.
het uitvoeren van een eenvoudig lokaal Commando
hoewel PsExec het meest bekend is voor het uitvoeren van commando ’s op externe computers, kunt u ook lokaal commando’ s uitvoeren.
u kunt opdrachten lokaal uitvoeren door simpelweg geen computernaam op te geven zoals hieronder.
> psexec <local command or EXE file>
waarom zou u dit doen? Een reden zou zijn om commando ‘ s uit te voeren als het lokale systeem account., U kunt de -s
switch gebruiken om elk commando lokaal of op afstand als systeem uit te voeren, zoals u later meer zult weten.
bekijk de korte video hieronder. Merk op dat u eenvoudig de -s
switch moet opgeven samen met het uitvoerbare Commando-interpreter voor psexec om een nieuwe opdrachtsessie te starten als NT AUTHORITY\SYSTEM.,
PsExec commando ‘ s (meer geavanceerd)
begin dan met het leren van meer geavanceerde technieken in PsExec. PsExec kan veel meer doen dan alleen het uitvoeren van een enkele opdracht op een enkele computer.
het uitvoeren van opdrachten op meerdere computers
PsExec is niet alleen beperkt tot het uitvoeren van opdrachten op een externe computer tegelijk., Deze tool heeft 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 op een paar verschillende manieren uitvoeren.
door komma ‘ s gescheiden computernamen
bij het uitvoeren van een opdracht op een enkele externe computer geeft u gewoonlijk een enkele computernaam op, zoals \\REMOTECOMPUTER
. U kunt ook meerdere computers opgeven, gescheiden door komma ‘ s, zoals hieronder.,
> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3
alle Computers in een Active Directory-domein
als u PsExec draait op een met Active Directory-domein verbonden computer en u wilt een opdracht uitvoeren op alle computers in dat domein, gebruik dan een jokerteken.
PsExec zal uw volledige Active Directory-domein doorzoeken en proberen een opdracht op elke computer uit te voeren. Hieronder volgt een voorbeeld van de syntaxis over hoe PsExec zal proberen verbinding te maken met elke computer in het domein waar de uitvoerende computer deel van uitmaakt en het commando hostname
zal uitvoeren.,
Als u een asterisk gebruikt om alle computers in een domein te vinden terwijl de lokale computer deel uitmaakt van een werkgroep, krijgt u de fout
A system error has occurred: 6118
.
het gebruik van een joker dwingt PsExec om in wezen het commando 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.
lezen uit een bestand
een andere manier om opdrachten op meerdere computers tegelijk uit te voeren is door een tekstbestand te gebruiken., Met behulp van de syntaxis @<filename.txt>
, zal PsExec elke regel in het tekstbestand lezen alsof het een computernaam is. Het zal dan elke computer afzonderlijk verwerken.
hieronder kunt u een voorbeeld zien van het gebruik van PowerShell om een tekstbestand met regel gescheiden computernamen aan te maken en dat te gebruiken als invoer voor psexec.
PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txtPS51> psexec @computers.txt hostname
lokale programma ‘ s kopiëren naar de externe computer
met behulp van de schakelaar -c
kopieert psexec elk lokaal programma naar de externe computer voordat het wordt uitgevoerd.,
misschien heeft u een EXE op uw lokale computer in een C:\Tools map en zou graag om het uit te voeren op een externe computer. U kunt dit doen met behulp van de volgende syntaxis:
> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe
wanneer u de -c
switch gebruikt en geen uitvoerbaar bestand opgeeft, zal PsExec het bestand nog steeds kopiëren, maar u krijgt een foutmelding dat systeem het opgegeven bestand niet kan vinden. Dit gebeurt omdat PsExec altijd zal proberen om het bestand dat u kopieert uit te voeren.,
Als u bestanden naar externe computers moet kopiëren voordat u PsExec gebruikt, gebruikt u in plaats daarvan de Copy-Item
PowerShell-cmdlet.
externe processen uitvoeren onder alternatieve referenties
een ander populair gebruik van PsExec is het uitvoeren van opdrachten onder alternatieve accounts. PsExec zal standaard proberen verbinding te maken met de externe computer onder uw momenteel ingelogde account. Meer specifiek, het zal uw account imiteren op de externe computer.,
met behulp van de schakelaar -u
en optioneel -p
kunt u verbinding maken met de externe computer met een alternatief gebruikersaccount. PsExec zal dan versleutelen zowel de gebruikersnaam en het wachtwoord en stuur ze naar de externe computer voor verificatie.
als u zich bijvoorbeeld in een werkgroep bevindt, moet u altijd de gebruikersnaam opgeven waarmee u zich bij de externe computer wilt aanmelden.
> psexec \\REMOTECOMPUTER hostname -u localadmin -p $$word
als beide computers lid zijn van Active Directory, zorg er dan voor dat u het gebruikersaccount voorvult met de domeinnaam.,
> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p $$word
merk op dat wanneer u de schakelaar -u
niet gebruikt, psexec uw ingelogde account imiteert op de externe computer. Het heeft geen toegang tot netwerkbronnen.
processen draaien als het lokale systeemaccount
een van de handigste functies van het uitvoeren van PsExec onder een alternatief account is het gebruik van de -s
switch. Met deze schakelaar kan PsExec (en uw extern uitgevoerde toepassing) worden uitgevoerd onder het lokale systeemaccount van de externe (of lokale) computer.,
opmerking hieronder Ik heb geen naam van een externe computer toegevoegd. PsExec zal net zo graag draaien op de lokale computer ook. In dit geval gebruik ik de optie -s
om PsExec te vertellen een lokale opdrachtprompt te starten als het lokale systeemaccount.,
Om een opdrachtprompt als LOKAAL SYSTEEM op een externe computer, voeg de naam van de computer de verwijzing zoals hieronder:
> psexec -s \\REMOTECOMPUTER cmd
de Lancering van GUI Toepassingen op Afstand
een Andere nuttige PsExec-schakelaar -i
. Standaard staat PsExec niet toe dat de op afstand uitgevoerde opdracht vensters op de externe computer oproept., Dit is handig, want als je opdrachten op afstand uitvoert, zul je het scherm toch niet zien.
maar misschien moet u programma ‘ s voor uw gebruikers openen. U persoonlijk zal niet worden met behulp van de applicatie, maar een eindgebruiker zal. Gebruik in dat geval de schakelaar -i
.
misschien moet u een Kladblok-venster openen op een externe computer. Geen probleem. Start Kladblok.exe met de-i
switch en PsExec zal Kladblok openen.,
> psexec -i \\REMOTECOMPUTER notepad
zorg ervoor dat u ook de -d
schakel om de verbinding te verbreken wanneer het interactieve venster wordt geopend. Standaard wacht PsExec tot het uitgevoerde proces is voltooid. Als het proces op afstand (in dit geval Kladblok) blijft draaien, zal PsExec nooit de controle teruggeven.,
met behulp van de -d
switch met -i
zal PsExec vertellen niet te wachten tot het proces op afstand is voltooid. In plaats daarvan, het zal loskoppelen en terug controle aan u zodra het externe proces wordt uitgevoerd.
het omleiden van uitvoer
Psexec zal elke uitvoer vertrouwen die vanuit het externe proces naar uw lokale sessie wordt verzonden. Meestal gaat deze uitvoer rechtstreeks naar uw lokale console. Maar als u wilt omleiden, u kunt dit doen met behulp van typische redirection operators.,
bijvoorbeeld, als u een commando wilt uitvoeren en alle uitvoer wilt stilleggen, kunt u uitvoer en fouten omleiden naar null met ^> nul ^2^&1
.
merk op dat de speciale tekens met een hat worden weggelaten. (
^
).
PsExec Use Cases
als je eenmaal geleerd hebt hoe je psexec moet gebruiken, zul je onvermijdelijk verschillende specifieke use cases tegenkomen. In deze sectie, zult u een aantal real-world use cases en voorbeelden met behulp van psexec leren.,
het starten van een opdrachtprompt op afstand (psexec cmd)
een van de meest voorkomende gevallen is het starten van PsExec als een interactieve opdrachtprompt. PsExec voert niet alleen commando ‘ s op afstand uit. Het kan ook commando uitvoer terug te sturen naar uw console. Hierdoor kan het een geweldige telnet maken (als iemand dat nog gebruikt) of misschien PowerShell Enter-PSSession
vervanging.
om een opdracht op afstand te starten, geeft u de naam van de externe computer op en voert u de CMD-toepassing uit. Cmd is de windows command interpreter., Omdat PsExec interactief gebruik ondersteunt, geeft het graag een knipperende cursor en een prompt terug.
> psexec \\REMOTEPC cmd
Op dit moment is de wereld uw oester. U kunt opdrachten uitvoeren op uw lokale computer via deze “geneste” opdrachtprompt en ze zullen worden uitgevoerd op de externe computer.
Typ exit
om de opdrachtprompt te verlaten., PsExec stopt het cmd
proces op de externe computer en geeft de focus terug aan de lokale computer.
gebruik Ctrl-C niet 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.
software op afstand installeren
U kunt PsExec gebruiken als software-implementatietool voor arme mensen. Misschien hebt u een MSI-installatieprogramma dat u moet uitvoeren op een of meer externe computers met de naam setup.msi., Dit installatieprogramma moet worden gekopieerd naar de externe computers en vervolgens worden uitgevoerd met de msiexec.exe utility met een paar schakelaars.
Hieronder is een voorbeeld van hoe u PsExec kunt gebruiken om software op afstand te implementeren. Dit voorbeeld kopieert de Instellingen.msi naar de externe computer start vervolgens het MSI-installatieprogramma interactief op als het systeemaccount.
> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi
accepteren van de EULA zonder de /accepteula switch
zoals eerder vermeld, de eerste keer dat PsExec draait, moet je een EULA accepteren., Je zou de /accepteula
switch kunnen gebruiken, maar je zou het ook in het register kunnen “stagen”.
bij de eerste start maakt PsExec een registersleutel aan op HKCU \ Software \ Sysinternals\PsExec. In plaats van die registersleutel, creëert het een registerwaarde genaamd Eulaaaccepted met een DWORD-waarde van 1.
met uw favoriete methode om het register op externe computers aan te passen, hoeft u alleen maar deze sleutel/waarde aan te maken op computers waarop u PsExec wilt uitvoeren. Eenmaal aangemaakt, hoeft /accepteula
niet te worden uitgevoerd!,
door PowerShell en PsExec te combineren
voor PowerShell hadden we alleen PsExec. We hebben opties. PowerShell kan PsExec in veel situaties vervangen, maar in andere situaties aanvullen.
computernamen bouwen met PowerShell
in plaats van \\*
om alle computers in het domein te vinden, kunt u PowerShell gebruiken. Door PowerShell te gebruiken, kunt u niet alleen bepaalde computers kiezen, maar hoeft u niet het firewall-gevoelige net view /all
gedrag te gebruiken.,
U kunt PowerShell gebruiken om een tekenreeks aan te maken die alle computernamen bevat, gescheiden door een komma. Je kunt dan die tekenreeks doorgeven aan PsExec die vrolijk elk zal verwerken zoals je elk handmatig hebt getypt.
hieronder kunt u een voorbeeld zien van het gebruik van deGet-AdComputer
cmdlet deel van de ActiveDirectory PowerShell module.
PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname
Enabling PowerShell Remote Remote
Als u externe computers hebt waarmee u liever PowerShell Remoting gebruikt in plaats van PsExec, kunt u PsExec gebruiken om ze in te schakelen.,
door Enable-PSRemoting
of de winrm uit te voeren.cmd batch-bestand op externe computers, kunt u snel inschakelen PowerShell Remoting op veel computers tegelijk.
hieronder kunt u een voorbeeld zien van het aanroepen van de winrm.cmd batch-bestand op een externe computer die wordt uitgevoerd als het systeemaccount. Omdat de uitvoer van dat commando niet nodig is, wordt het stilgezet met 2>&1> $null
.
$computerName = 'REMOTECOMPUTER'psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null
PsExec foutmeldingen
Het is de moeite waard om vooraf te vermelden dat de meeste foutcodes die u van PsExec terug ziet, afkomstig zijn van het proces op afstand; niet van PsExec., Maar het is handig om deze foutcodes te begrijpen en wat ze kunnen betekenen.
als u een referentie wilt over alle Windows-foutcodes, raad ik u aan deze uitgebreide lijst met Windows-foutcodes te bekijken.
Hieronder is een lijst met veelvoorkomende foutcodes die u kunt zien geretourneerd door PsExec.
– Fout Code | Uitleg |
---|---|
-2146232576 | Meestal geretourneerd door Windows Update wanneer er een fout optreedt., |
0 | opdracht succesvol uitgevoerd | 1 | onjuiste functie. Er gebeurde een probleem. Dat is het zo ‘ n beetje. |
1603 | fatale fout tijdens de installatie. Dit wordt meestal geretourneerd door msiexec. |
2 | het systeem kan het opgegeven bestand niet vinden | 4 | het systeem kan het bestand niet openen. |
5 | toegang is geweigerd. |
6 | de handgreep is ongeldig., |
6118 | de lijst met servers voor deze werkgroep is momenteel niet beschikbaar |
Geef een reactie