om det fanns ett kommandoradsverktyg som kunde konkurrera med robocopy när det gäller användbarhet är det PsExec. Den Sysinternals PsExec verktyget är lika allestädes närvarande som de kommer i en IT admin arsenal. Detta verktyg gör det möjligt för administratörer att fjärr köra kommandon precis som om de var på den lokala datorn.

För att täcka PsExec-verktyget på djupet var det passande att täcka det här eftertraktade verktyget i en ATA Ultimate Guide. I den här guiden kommer du att lära dig vad psexec är, vad det kan göra med många exempel på hur du använder det här användbara verktyget.,

Innehållsförteckning

Vad är PsExec.exe?

om du är ny på den eller kanske inte har haft behov av att köra kommandon och verktyg på fjärrdatorer kanske du inte vet vad psexec är.

PsExec eller psexec.exe är ett kommandoradsverktyg byggt för Windows. Det gör det möjligt för administratörer att köra program på lokala och mer vanliga fjärrdatorer. Det är ett gratis verktyg del av Sysinternals pstools suite byggd av Mark Russinovich för många år sedan.,

det byggdes för att ersätta verktyg som telnet som tvingade dig att öppna portar och införa säkerhetsproblem. Numera har vi andra alternativ som PowerShell Remoting och Invoke-Command PowerShell cmdlet men PsExec har fortfarande sin plats.

PsExec tillåter full interaktivitet för konsolprogram utan att behöva installera någon programvara. Som du ser genom den här ultimata guiden kan PsExec starta interaktiva kommandotolkar, köra som lokalt system på fjärrdatorer, köra kommandon på flera datorer samtidigt och mer.,

den stöder alla versioner av Windows sedan Windows XP. Det betyder att ja, PsExec på Windows 10 är också en sak. Det är ett enkelt verktyg för att köra som fungerar på nästan allt men inte förväxla sin enkelhet med sina möjligheter!

förutsättningar

du behöver bara köra ett modernt Windows-operativsystem för att PsExec ska köras på din lokala dator. Men du kommer att vilja köra psexec mot fjärrdatorer. För att göra det måste du se till att några objekt är på plats.

om du inte har dessa objekt på plats nu eller osäker, oroa dig inte., I nästa avsnitt täcker vi hur man skriver lite PowerShell för att testa dina fjärrdatorer.

  • en modern Windows-dator (lokal)
  • fil-och skrivardelning öppen (fjärrdator, TCP-port 445)
  • admin$ administrative share available (fjärrdator)
  • du vet ett lokalt kontos referens (fjärrdator)

Från och med detta skrivande är PsExec på v2.2 och kommer att vara den version du lär dig om i den här artikeln.,

installera PSexec (med Fjärrdatorinställningar)

tekniskt sett installerar du inte PsExec eftersom det bara är ett kommandoradsverktyg men tillräckligt nära. Eftersom ingen installation är nödvändig behöver du bara ladda ner och extrahera den från pstools zip-filen. PsExec är inte tillgängligt som ett fristående verktyg och är en del av pstools suite of tools.

Ladda ner PSExec

Du kan antingen extrahera ZIP-filen manuellt eller här är en praktisk PowerShell snutt för att ladda ner och extrahera PsExec från sin pstools ZIP-fil. Observera att detta tar bort alla andra PsTools verktyg., Många är fortfarande praktiskt men vi kommer inte att täcka dem i den här artikeln.

Fjärrdatorkonfiguration

När du har hämtat PsExec måste du se till att fjärrdatorn du ska köra den på är öppen. PsExec har enkla krav; fil – och skrivardelning aktiverad och admin$ administrativ andel tillgänglig.

Du kan gå till alla fjärrdatorer, öppna Windows Firewall-applet, gå till tillåtna appar och aktivera fil-och skrivardelning på alla datorer som du ser nedan.,

Observera att fil-och skrivardelning är en känd säkerhetsrisk, så se till att endast den privata brandväggsprofilen är aktiverad.

tillåter fil-och utskriftsdelning i Windows-brandväggen

eller så kan du besöka varje dator och köra netsh-verktyget för att öppna det via:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes
> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

eller så kan du använda powershells Set-NetFirewallRule cmdlet för att göra det.,

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

om du inte vill besöka varje dator har du PowerShell Remoting tillgänglig och du är i en Active Directory-domän, du kan också öppna brandväggen på många datorer samtidigt med Invoke-Command cmdlet.

använda PsExec

innan du kan köra måste du gå. Om du aldrig har använt PsExec tidigare, du är i för en behandling! Var noga med att läsa det här avsnittet först för att få dina fötter våta för att lära dig grunderna innan du hoppar i den djupa änden senare i den här artikeln.,

första gången du kör PsExec på ett nytt system kommer du omedelbart att se PsExec-licensavtalet komma upp. Du måste klicka på knappen Godkänn för att börja använda den.

PSExec license agreement (EULA)

om du vill förhindra att licensavtalet visas kan du tyst acceptera det med /accepteula

om du vill förhindra att licensavtalet visas kan du tyst acceptera det med /accepteula växla enligt nedan.,

> psexec /accepteula

Du lär dig några knep för att tysta denna EULA-popup på lokala och fjärrdatorer senare i artikeln.

att hitta hjälp

När du utforskar PsExec ska du inte använda någon switch alls. När du helt enkelt kör psexec utan växlar, kommer det att returnera alla alternativ och en kort förklaring av vad varje gör. Alla alternativ finns i tabellen nedan för din bekvämlighet.,

växla förklaring
-a separata processorer där programmet kan köras med kommatecken där 1 är den lägsta numrerade CPU. Till exempel, för att köra programmet på CPU 2 och CPU 4, Skriv: ”-a 2,4”
-C kopiera det angivna programmet till fjärrsystemet för körning. Om du utelämnar det här alternativet måste programmet vara i systemvägen på fjärrsystemet.,
-d vänta inte på att processen avslutas (icke-interaktiv).
-e laddar inte det angivna kontots profil.
-f kopiera det angivna programmet även om filen redan finns på fjärrsystemet.
-i kör programmet så att det interagerar med skrivbordet för den angivna sessionen på fjärrsystemet. Om ingen session anges körs processen i konsolsessionen. Vissa har rapporterat bästa resultat alltid med-s-omkopplaren med – i på grund av att windows är ointelligible.,
-h om målsystemet är Vista eller högre, har proc
-l Kör processen som begränsad användare (remsor administratörsgruppen och tillåter endast privilegier som tilldelats användargruppen). På Windows Vista körs processen med låg integritet.
-n anger timeout i sekunder ansluta till fjärrdatorer.
-p anger valfritt lösenord för användarnamn. Om du utelämnar detta kommer du att uppmanas att ange ett dolt lösenord.,
-r anger namnet på fjärrtjänsten för att skapa eller interagera. med.
-s kör fjärrprocessen i systemkontot.
-u anger valfritt användarnamn för inloggning till dator.
-v kopiera den angivna filen endast om den har ett högre versionsnummer eller är nyare än den på fjärrsystemet.
-w Ställ in arbetskatalogen för processen (relativ
-x Visa användargränssnittet på Winlogon secure desktop (endast lokalt system).,
-arm anger att fjärrdatorn är ARM-arkitektur.
-prioritet anger-låg, – belownormal, – abovenormal, – hög eller
– realtid kör processen med en annan prioritet. Använd
-bakgrund kör vid lågt minne och I / O-prioritet på Vista.
dator direkt PsExec för att köra programmet på datorn eller datorer som anges., Om du utelämnar datorns Namn PsExec kör programmet på det lokala systemet, och om du anger ett jokertecken ( \ * ), kör PsExec
@file PsExec kör kommandot på var och en av de datorer som anges i filen.
-accepteula denna flagga undertrycker visningen av licensdialogrutan.
-nobanner visa inte startbannern och upphovsrättsmeddelandet.,

kör ett enkelt fjärrkommando

som mest grundläggande kräver PsExec två parametrar: ett datornamn och ett kommando att köra. Om du har ett kommando att köra på fjärrdatorn som inte kräver några argument som hostname, kan du helt enkelt lägga till det efter datorns namn.

Observera att om du inte anger en fullständig filsökväg måste kommandot som ska köras vara i sökvägen för användare eller system., Dessutom, om du har ett program med mellanslag i namnet, kan du alltid bifoga programmet i mellanslag som ”min ansökan.exe”.

> psexec \\REMOTECOMPUTER hostname

Du kan se nedan att för att köra kommandot hostname på CONTOSODC1-datorn definierar du att det är UNC-sökväg följt av kommandot. PSExec ansluter sedan till fjärrdatorn säkert, kör kommandot och returnerar utmatningen. I det här fallet returnerade kommandothostname värdnamnet på datorn som är CONTOSODC1.,

om kommandot inte är cmd eller en annan konsol, kommer PsExec snabbt att avsluta fjärrsessionen och returnera exitkoden som fjärrprocessen returnerade.

Obs! fel-eller exitkoden som returneras från psexec kommer inte från PsExec själv. Istället kommer det från kommandot som psexec exekverade på fjärrdatorn.,

Successful psexec remote command execution

How PsExec Works on Remote Computers

PsExec goes through a few steps to execute programs on remote computers.

  1. Create a PSEXESVC.exe file in C:\Windows.
  2. Create and start a Windows service on the remote computer called PsExec.
  3. Execute the program under a parent process of psexesvc.exe.
  4. When complete, the PsExec Windows service will be stopped and removed.,

När processen inte fungerar 100% korrekt kan du behöva manuellt ta bort tjänsten med sc-kommandot.

kör ett enkelt lokalt kommando

Även om PsExec är mest känt för att köra kommandon på fjärrdatorer, kan du också köra kommandon lokalt.

Du kan köra kommandon lokalt genom att helt enkelt inte tillhandahålla ett datornamn som nedan.

> psexec <local command or EXE file>

varför skulle du göra det här? En anledning skulle vara att utföra kommandon som det lokala systemkontot., Du kan använda-s – växeln för att köra ett kommando som system lokalt eller på distans, eftersom du får veta mer om senare.

ta en titt på den korta videon nedan. Observera att du helt enkelt behöver ange -s – omkopplaren tillsammans med kommandotolken som är körbar för psexec för att starta en ny kommandosession som NT AUTHORITY\SYSTEM.,

kör Psexec som SYSTEM

PsExec-kommandon (blir mer avancerade)

När du har grunderna ner kan du sedan börja lära dig mer avancerade tekniker i psexec. PsExec kan göra mycket mer än bara köra ett enda kommando på en enda dator.

kör kommandon på flera datorer

PsExec är inte bara begränsat till att köra kommandon på en fjärrdator åt gången., Detta verktyg har också stöd för att kopiera program och köra kommandon på flera datorer samtidigt.

Du kan köra PsExec på flera datorer samtidigt på några olika sätt.

kommaseparerade datornamn

vanligtvis när du kör ett kommando på en enda fjärrdator anger du ett enda datornamn som\\REMOTECOMPUTER. Du kan också ange flera datorer åtskilda med kommatecken som nedan.,

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

alla datorer i en Active Directory-domän

om du kör PsExec på en Active Directory-domän-ansluten dator och du vill spränga en kommandoutförande på alla datorer i den domänen, använd ett jokertecken.

PsExec söker igenom hela Active Directory-domänen och försöker köra ett kommando på varje dator. Nedan följer exempelsyntax om hur PsExec försöker ansluta till varje dator på domänen den verkställande datorn är en del av och kör kommandot hostname.,

Observera att om du använder en asterisk för att hitta alla datorer i en domän medan den lokala datorn är en del av en arbetsgrupp får du feletA system error has occurred: 6118.

med hjälp av ett jokertecken tvingar PsExec att i huvudsak köra kommandot net view /all för att först hitta alla datorer i domänen. Detta är ett föråldrat sätt att hitta datorinformation på grund av dess beroende av NetBIOS.

läsa från en fil

ett annat sätt du kan köra kommandon på flera datorer samtidigt är att använda en textfil., Med hjälp av syntaxen @<filename.txt> läser PsExec varje rad i textfilen som om den vore ett datornamn. Det kommer då att behandla varje dator individuellt.

nedan kan du se ett exempel på att använda PowerShell för att skapa en textfil med linjeavgränsade datornamn och använda den som inmatning för psexec.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txtPS51> psexec @computers.txt hostname

kopiera lokala program till fjärrdatorn

med-c – växeln kopierar psexec alla lokala program till fjärrdatorn före körning.,

kanske har du en EXE på din lokala dator i en C:\Tools mapp och vill köra den på en fjärrdator. Du kan göra det med följande syntax:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

När du använder växeln-c och inte anger en körbar fil, kopierar PsExec fortfarande filen men du får ett fel som anger att systemet inte hittar den angivna filen. Detta händer eftersom PsExec alltid försöker köra filen du kopierar.,

om du behöver kopiera filer till fjärrdatorer innan du använder PsExec, användCopy-Item PowerShell cmdlet istället.

kör Fjärrprocesser under alternativa referenser

ett annat populärt användningsfall för PsExec är att köra kommandon under alternativa konton. Som standard försöker PsExec ansluta till fjärrdatorn under ditt inloggade konto. Mer specifikt kommer det att imitera ditt konto på fjärrdatorn.,

med-u och valfritt-p kan du ansluta till fjärrdatorn med ett alternativt användarkonto. PsExec krypterar sedan både användarnamn och lösenord och skickar dem till fjärrdatorn för autentisering.

om du till exempel är i en arbetsgrupp måste du alltid ange användarnamnet för att autentisera fjärrdatorn som.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p $$word

om båda datorerna är medlemmar i Active Directory, se till att förord användarkontot med domännamnet.,

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p $$word

Observera att när du inte använder växeln-u, imiterar psexec ditt inloggade konto på fjärrdatorn. Det kommer inte att ha tillgång till några nätverksresurser.

processer som körs som det lokala systemkontot

en av de mest användbara funktionerna för att köra PsExec under ett alternativt konto använder-s – omkopplaren. Med den här växeln kan PsExec (och din fjärrstyrda applikation) köras under fjärrdatorns (eller lokala) lokala systemkonto.,

Observera nedan jag inkluderade inte ett fjärrdatornamn. PsExec kommer lika gärna att köras på den lokala datorn också. I det här fallet använder jag alternativet -s för att berätta för PsExec att starta en lokal kommandotolk som det lokala systemkontot.,

kör psexec som lokalt SYSTEM

för att köra en kommandotolk som lokalt SYSTEM på en fjärrdator, Lägg till datornamnet till referens som nedan:

> psexec -s \\REMOTECOMPUTER cmd

lansera GUI-program på distans

en annan användbar PsExec Switch är -i. Som standard tillåter inte PsExec det fjärrstyrda kommandot att ta upp några fönster på fjärrdatorn., Detta är till hjälp eftersom om du kör kommandon på distans, du kommer inte att se skärmen ändå.

men kanske måste du ta upp program för dina användare. Du personligen inte kommer att använda programmet men en slutanvändare kommer. Använd i så fall omkopplaren -i.

kanske måste du ta upp ett anteckningsblockfönster på en fjärrdator. Inga problem. Kör anteckningsblock.exe med-i switch och PsExec kommer att öppna anteckningsblock.,

> psexec -i \\REMOTECOMPUTER notepad
kör psexec i interaktivt läge

var noga med att även använda -d växla för att koppla bort när det interaktiva fönstret tas upp dock. Som standard väntar PsExec på den process som exekveras för att slutföra. Om fjärrprocessen (anteckningsblock i det här fallet) hålls igång, kommer PsExec aldrig att returnera kontrollen.,

med-d – omkopplaren med-i kommer PsExec att inte vänta tills fjärrprocessen är klar. Istället, det kommer att koppla bort och tillbaka kontrollen till dig så snart fjärrprocessen utförs.

omdirigera utdata

Psexec kommer att förlita sig på alla utdata som skickas från fjärrprocessen till din lokala session. Vanligtvis kommer denna utgång att gå direkt till din lokala konsol. Men om du vill omdirigera den, du kan göra det med hjälp av typiska omdirigering operatörer.,

om du till exempel vill köra ett kommando och tysta alla utdata kan du omdirigera utdata och fel till null med ^> nul ^2^&1.

Observera att specialtecknen flydde med en hatt. ( ^).

PsExec användningsfall

När du har lärt dig hur du använder psexec kommer du oundvikligen att stöta på olika specifika användningsfall. I det här avsnittet lär du dig några verkliga användningsfall och exempel med hjälp av psexec.,

starta en Fjärrkommandot (psexec cmd)

ett av de vanligaste användningsfallen lanserar PsExec som en interaktiv kommandotolk. PsExec kör inte bara kommandon på distans. Det kan också skicka kommandoutmatning tillbaka till din konsol. På grund av detta kan det göra en stor telnet (om någon fortfarande använder det) eller kanske PowerShell Enter-PSSession ersättning.

om du vill starta ett fjärrkommando anger du fjärrdatornamnet och Kör cmd-programmet. Cmd i Windows kommandotolk., Eftersom PsExec stöder interaktiv användning, kommer det gärna att returnera en blinkande markör och en prompt.

> psexec \\REMOTEPC cmd
öppna en kommandotolk på en fjärrdator

vid denna tidpunkt är världen ditt ostron. Du kan köra kommandon på din lokala dator via den här” kapslade ” kommandotolken och de kommer att utföras på fjärrdatorn.

för att avsluta kommandotolken, skrivexit., PsExec stoppar cmd – processen på fjärrdatorn och returnerar fokus till den lokala datorn.

Använd inte Ctrl-C för att stänga en interaktiv cmd-session. Använd alltid exit. Om du använder Ctrl-C fortsätter psexec-sessionen att köras på fjärrdatorn.

installera programvara på distans

Du kan använda PsExec som ett verktyg för programvarudistribution för dålig människa. Kanske har du ett MSI-installationsprogram som du behöver köra på en eller flera fjärrdatorer som heter setup.msi., Det här installationsprogrammet måste kopieras till fjärrdatorerna och sedan exekveras med msiexec.exe verktyg med några växlar.

nedan är ett exempel på hur du kan använda PsExec för att distribuera programvara på distans. Detta exempel kopierar inställning.MSI till fjärrdatorn startar sedan MSI installer interaktivt som systemkonto.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

acceptera licensavtalet utan/accepteula switch

som tidigare nämnts, första gången PsExec körs, måste du acceptera ett licensavtal., Du kan använda /accepteula – växeln men du kan också ”stage” den i registret.

När den startas för första gången skapar PsExec en registernyckel på HKCU\Software\Sysinternals\PsExec. I stället för registernyckeln skapar det ett registervärde som heter EulaAccepted med ett DWORD-värde på 1.

med din favoritmetod för att ändra registret på fjärrdatorer behöver du helt enkelt skapa den här nyckeln/värdet på datorer som du vill köra PsExec på. När du har skapat behöver du inte köra/accepteula!,

gifta PowerShell och PsExec

innan PowerShell, allt vi hade var PsExec. Nu har vi alternativ. PowerShell kan ersätta PsExec i många situationer men komplettera den i andra.

bygga datornamn med PowerShell

istället för att använda \\* för att hitta alla datorer i domänen, kan du använda PowerShell istället. Genom att använda PowerShell kan du inte bara välja vissa datorer utan du behöver inte använda brandväggspensen net view /all beteende.,

Du kan använda PowerShell för att skapa en sträng som innehåller alla datornamn åtskilda av ett kommatecken. Du kan sedan skicka den strängen till PsExec som kommer glatt bearbeta var och en som du skrev var och en manuellt.

Du kan se nedan ett exempel på att användaGet-AdComputer cmdlet-delen av ActiveDirectory PowerShell-modulen.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

aktivera PowerShell Remoting distans

om du har fjärrdatorer du hellre använder PowerShell Remoting med istället för PsExec, kan du använda PsExec för att aktivera dem.,

genom att köraEnable-PSRemoting eller winrm.cmd batch-fil på fjärrdatorer kan du snabbt slå på PowerShell Remoting över många datorer samtidigt.

nedan kan du se ett exempel på att ringa winrm.cmd batch-fil på en fjärrdator som körs som systemkonto. Eftersom utmatningen från det kommandot inte behövs tystas den med 2>&1> $null.

$computerName = 'REMOTECOMPUTER'psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

PsExec felmeddelanden

det är värt att nämna igen att de flesta felkoder som du ser returneras från PsExec är från fjärrprocessen; inte från PsExec., Men det är bra att ha en förståelse för dessa felkoder och vad de kan innebära.

om du vill ha en referens på alla Windows-felkoder rekommenderar jag att du checkar ut den här uttömmande listan över Windows-felkoder.

Nedan följer en lista med vanliga felkoder som du kan se returneras av PsExec.

felkod förklaring
-2146232576 returneras vanligtvis av Windows Update när ett fel uppstår.,
0 kommandot körs framgångsrikt
1 felaktig funktion. Ett problem hände. Det var allt.
1603 allvarligt fel under installationen. Detta returneras vanligtvis av msiexec.
2 systemet kan inte hitta den angivna filen
4 systemet kan inte öppna filen.
5 åtkomst nekas.
6 handtaget är ogiltigt.,
6118 listan över servrar för denna arbetsgrupp är för närvarande inte tillgänglig

din Feedback