Stoomachtige PowerShell Get-Process Cmdlet voor Lopende Processen

Ben je geïnteresseerd in het gebruik van de PowerShell Get-Process cmdlet om de lopende processen van een systeem weer te geven? Met Get-Process kun je de eigenaar van het proces vinden, het proces-ID, of zelfs waar op de schijf het proces zich bevindt.

In dit artikel leer je hoe je de Get-Process cmdlet van PowerShell kunt gebruiken aan de hand van praktijkvoorbeelden. Als het manipuleren van processen om ze naar jouw wil te buigen op Windows of Linux klinkt als plezier, blijf dan lezen!

Gerelateerd: Hoe een proces te beëindigen in Linux met behulp van ps, pgrep, pkill en meer!

Vereisten

Voordat je verder gaat, zijn hieronder de noodzakelijke vereisten om de voorbeelden in dit artikel te volgen.

  • Hoewel Windows PowerShell 5.1 voldoende is voor de meeste voorbeelden hier, is PowerShell 7.1 en hoger vereist voor Linux-ondersteuning.

Gerelateerd: Upgraden naar PowerShell 7: Een stapsgewijze handleiding

  • Dit artikel maakt gebruik van Windows 10 en Ubuntu 20.04 LTS, maar elk besturingssysteem waarop PowerShell draait, zal werken.

Klaar? Laten we duiken en wat processen beheren!

Weergeven van Lopende Processen

Get-Process beheert lokale processen. In dit eerste voorbeeld gebruik je de PowerShell Get-Process cmdlet. Deze opdracht geeft alle actieve processen weer.

Get-Process geeft een momentopname van de lopende procesinformatie van een systeem. Om realtime procesinformatie weer te geven, biedt Windows Windows Taakbeheer en Linux biedt het top-commando aan.

Om te beginnen opent u uw PowerShell-console en voert u Get-Process uit. Merk op dat Get-Process de informatie over de lopende processen retourneert, zoals hieronder weergegeven. De uitvoerindeling is identiek voor de Windows- en Linux-besturingssystemen.

Using the Get-Process cmdlet on Windows to display local processes.

Standaard bestaan de gps of ps als commando-aliassen voor Get-Process. Omdat PowerShell 7 platformonafhankelijk is, conflicteert het ps-commando met een ingebouwd Linux-commando. Daarom werkt ps niet op Linux, alleen de gps-alias.

De betekenis van de uitvoer van Get-Process is mogelijk niet onmiddellijk duidelijk. De standaardeigenschappen van Get-Process worden hieronder meer in detail beschreven.

  • NPM(K) – De hoeveelheid niet-gepagineerd geheugen die een proces gebruikt, weergegeven in kilobytes, zoals aangegeven door de (K)-notatie.
  • PM(M) – De hoeveelheid pageable-geheugen die een proces gebruikt, weergegeven in megabytes, zoals aangegeven door de notatie (M).
  • WS(M) – De omvang van de werkset van het proces, weergegeven in megabytes. De werkset bestaat uit de pagina’s geheugen die recentelijk door het proces zijn aangeroepen.
  • VM(M) – De hoeveelheid virtueel geheugen die het proces gebruikt, weergegeven in megabytes. Omvat opslag in de paginabestanden op schijf.
  • CPU(S) – De hoeveelheid processortijd die het proces heeft gebruikt voor alle processen, weergegeven in seconden.
  • Id – De proces-ID (PID) van het proces.
  • SI – Sessie-identificatie van het actieve proces. Sessie 0 geeft aan dat het proces beschikbaar is voor alle gebruikers, 1 geeft aan dat het proces bestaat onder de eerste ingelogde gebruiker, enzovoort.
  • ProcessName – De naam van het actieve proces.

Om een lijst weer te geven van eigenschapsaliassen die zijn toegewezen aan volledige eigenschapsnamen, gebruikt u het commando Get-Process | Get-Member -MemberType 'AliasProperty'.

Hieronder volgt nog een goed voorbeeld. Voor elke instantie van het brave-proces dat het vindt, gebruikt het de ID van dat proces ($_.id) en geeft het door aan Get-NetTCPConnection. PowerShell gebruikt vervolgens Get-NetTCPConnection om informatie te vinden over elke netwerkverbinding die het brave-proces open heeft.

Voer de volgende code uit in je PowerShell-sessie wanneer de Brave-browser actief is.

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

Bedankt aan Jay Adams van SystemFrontier!

Congratulations, je kunt nu alle lopende processen bekijken op zowel Windows als Linux met Get-Process!

Specifieke kenmerken van processen vinden

Get-Process retourneert verschillende eigenschappen van lopende processen, zoals eerder gezien. Zoals bij alle andere PowerShell-objecten, kun je selectief eigenschappen van objecten kiezen.

Laten we nu een eenvoudig voorbeeld doorlopen van hoe je specifieke eigenschappen kunt ophalen voor een specifiek proces:

  1. Start je Windows-rekenmachine.

2. Met een open PowerShell-console voer je Get-Process uit met de parameter Name om alleen alle lopende processen met Calculator als naam weer te geven. Je ziet dezelfde uitvoer als eerder.

Get-Process -Name 'Calculator'

Get-Process retourneert zoals verwacht veel eigenschappen. Misschien wil je alleen CPU-gebruik vinden met de waarde onder de CPU(s)-kolom. Omring de Get-Process-opdracht met haakjes en verwijs naar de eigenschap CPU zoals hieronder getoond. Je zult zien dat het alleen de waarde voor de CPU-eigenschap retourneert.

(Get-Process -Name 'Calculator').CPU

Let op dat Get-Process een naam teruggeeft genaamd CPU(s) en het bovenstaande codefragment gebruikte alleen de naam CPU. Soms laat PowerShell de werkelijke eigenschapsnaam niet zien in de uitvoer. Dit concept wordt uitgevoerd met een PS1XML-opmaakbestand.

De CPU-tijd wordt uitgedrukt als een totaal van seconden over kernen. Om dat om te zetten naar een meer menselijk leesbaar getal, rond het af naar het dichtstbijzijnde tiende met behulp van een Math-methode zoals hieronder wordt getoond.

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)
Calculator process is using less than 1 second of CPU time across all cores.

U kunt de bovenstaande aanpak ook gebruiken om andere eigenschappen te vinden, zoals Id als u alleen het ID van een proces wilt zien.

Laat de Rekenmachine applicatie draaien. U zult deze applicatie gebruiken voor de rest van de voorbeelden.

Geheugengebruik van Processen Ophalen

Het oplossen van langzaam werkende systemen kan een uitdaging zijn, waarbij beperkt geheugen vaak een oorzaak is. Ga verder met de Rekenmachine app, haal het Rekenmachine proces op en toon alleen de VM eigenschap. Zoals hieronder te zien is, wordt het gebruikte geheugen weergegeven in megabytes (MB).

(Get-Process -Name 'Calculator').VM
Displaying the Calculator process memory usage.

Om het geheugengebruik beter te begrijpen, kunt u de ingebouwde PowerShell conversiefactoren gebruiken om megabytes (MB) om te zetten naar gigabytes (GB). In het onderstaande voorbeeld zult u het geheugengebruik omzetten naar GB en vervolgens de .NET math library Round methode gebruiken om de waarde af te ronden, zoals te zien is in de onderstaande screenshot.

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# Gebruik de .NET Math type Round methode
[Math]::Round($ProcessMemoryGB / 1GB)

Het gebruik van ingebouwde PowerShell hulpprogramma’s om de waarden om te zetten maakt het gemakkelijker om de output te begrijpen. Lees verder om te leren hoe u de ID van een proces kunt vinden.

Converting the calculator process memory usage to a rounded GB format.

Onbekende eigenschappen blootleggen

Niet alle eigenschappen zijn standaard opgenomen of worden weergegeven bij Get-Process. Lees hieronder meer over de eigenschappen Path en UserName en hoe u ze kunt gebruiken!

Ontdekken waar een procesbestand zich bevindt

Er zijn veel plaatsen op een systeem waar een uitvoerbaar procesbestand kan worden opgeslagen. Als een proces momenteel actief is, maakt Get-Process het gemakkelijk om het bestandssysteempad van het proces te vinden, ondanks dat Path standaard niet wordt weergegeven. Zoals hieronder wordt getoond, bevat de eigenschap Path de bestandslocatie van het uitvoerbare proces.

(Get-Process -Name 'Calculator').Path
Using Get-Process to display a process’s full file system path on Windows.

Net als in Windows retourneert Get-Process in Linux ook het bestandssysteempad. In het onderstaande voorbeeld wordt het proces gnome-calculator uitgevoerd met het pad weergegeven in de console-uitvoer.

(Get-Process -Name 'gnome-calculator').Path
Using Powershell Get-Process to display a process’s full file system path on Linux.

Handige slechteriken kunnen een proces dezelfde of vergelijkbare naam geven als een vertrouwd proces. Daarom helpt de mogelijkheid om het bestandssysteempad te vinden in een beveiligingsincidentrespons (IR)-scenario. Lees verder om te ontdekken hoe u de eigenaar van het proces kunt vinden, aangezien UserName niet is opgenomen in de standaarduitvoer.

De eigenaar van het proces vinden

Om de waarde van UserName in de uitvoer op te nemen, moet u de parameter IncludeUserName gebruiken. Het is belangrijk om de eigenaar van het proces te kennen, vooral om per ongeluk het proces van een andere gebruiker te beëindigen. Zoals hieronder getoond, is de eigenschap UserName nu opgenomen in de uitvoer van het proces.

Get-Process -Name 'Calculator' -IncludeUserName
Displaying the owner of Calculator process on Windows.

Lees ten slotte verder om te leren over het gebruik van Get-Process op een externe computer om procesinformatie op te halen!

Processen vinden op externe computers

Hoewel in Windows PowerShell Get-Process geen mogelijkheden voor externe computers heeft, kunt u altijd gebruikmaken van PowerShell Remoting en Invoke-Command om het op externe computers uit te voeren.

Gerelateerd: Hoe PSRemoting instellen met Windows en Linux

Maar als je Linux gebruikt of PowerShell 6 op Windows draait, heb je nu een ComputerName-parameter die je kunt gebruiken om processen op externe computers te bevragen.

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

De -ComputerName-parameter is verwijderd in PowerShell 7.x omdat de cmdlet niet direct gerelateerd is aan remoting. Om hetzelfde te bereiken, kun je hetzelfde omhullen in een Invoke-Command, zoals: Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }

Wanneer het bovenstaande commando wordt uitgevoerd op een externe computer, wordt dezelfde uitvoer weergegeven alsof het Get-Process-commando lokaal was uitgevoerd.

Hieronder volgt een voorbeeld van remoting naar een andere computer en het ophalen van actieve processen:

Computer and Getting Running Processes

Je kunt meerdere computers targeten door ze te scheiden met een komma bijvoorbeeld Get-Process -ComputerName SRV1,SRV2.

Volgende stappen

In dit artikel heb je geleerd hoe je de PowerShell Get-Process cmdlet kunt gebruiken om actieve processen te vinden met PowerShell op zowel lokale als externe computers, zowel Linux als Windows.

En nu, wat ga je doen met deze kennis? Probeer een door Get-Process verkregen proces door te geven aan Stop-Process op een lokale of externe computer om het te beëindigen!

Source:
https://adamtheautomator.com/powershell-get-process/