Opdracht 13 - Processen in Windows¶
Doel¶
Tijdens deze opdracht zullen we met eenvoudige commando's de werking van processen en hun bijbehorende informatie op een Windows-besturingssysteem achterhalen. De commando's worden uitgevoerd in een PowerShell-console.
Na deze opdracht kan je:
- Een overzicht van alle processen opvragen
- Een overzicht van alle processen van de gebruiker opvragen
- Een detailoverzicht voor één proces opvragen
- Een proces starten, pauzeren en stoppen
Verloop¶
Tekst in een grijs kader zijn commando's die je zal uitvoeren in de PowerShell terminal van jouw Windows Server VM. Af en toe zal je ook een vraag tegenkomen waarbij je bv. zelf het commando moet zoeken of een bepaalde actie moet uitvoeren.
Voor deze opdracht neem je de tekst stap voor stap door en voer je de commando's uit indien gegeven in de bijbehorende console. Aangezien in PowerShell niet alle commando's standaard aanwezig zijn, zal je soms door ons aangeleverde scriptjes (zie sectie Voorbereiding) moeten uitvoeren ter vervanging van een commando.
Doorheen de tekst en in de commando's zal je vaak tekst tussen < > zien staan. Dit betekent dat je deze moet vervangen door een passende waarde voor jouw situatie. Bijvoorbeeld: ps <procesid> wordt voor een proces met id 15 dus ps 15.
Je kan een huidig proces/commando altijd stoppen met "Ctrl + c".
Voorbereiding¶
We gaan er van uit dat je reeds een werkende Windows Server VM hebt (zie vorige opdrachten).
Voor we de rest van deze opdracht kunnen uitvoeren moeten we eerst de scriptjes naar onze virtuele machine kopiëren. De powershell scripts (extensie .ps1) zijn bedoeld voor de Windows Server VM. De zip die de scripts bevat kan je hier downloaden. Pak dit zip-bestand uit wanneer je het hebt gedownload.
Bestanden overzetten naar virtuele machines (in de cloud) gebeurt altijd via SSH. Dit gaan we in deze opdracht ook lokaal simuleren met onze Windows Server VM.
We gaan er ook van uit dat je reeds WinSCP of een gelijkaardig programma hebt geïnstalleerd (op jouw persoonlijk toestel) tijdens de vorige opdracht. Zo niet, ga dan eerst terug naar die opdracht en installeer WinSCP (of gelijkaardig).
Configureer voor jouw Windows Server VM ook een poortdoorverwijzing voor SSH (poort 22) zoals je eerder hebt gedaan voor de Ubuntu VM. Kies hier best een andere hostpoort dan die van de Ubuntu VM, bijvoorbeeld 2223.
Start je Windows Server virtuele machine en meld je aan als "Administrator". Ook hier moeten we een SSH server installeren. Daarvoor moeten we eerst even de Windows Update service manueel starten. Zoek naar services.msc in het startmenu.

Zoek de service "Windows Update" en rechtsklik erop. Kies "Properties" en wijzig het opstarttype naar "Manual". Klik op "Start" om de service onmiddellijk te starten. Klik op "OK" om de wijzigingen op te slaan.

Zoek hiervoor in het Start-menu naar "Manage optional features".

Klik op "Add a feature" en zoek naar "OpenSSH Server". Klik op "Install".

Na de installatie mag je de Windows Update service terug op "Disabled" zetten.
Zoek vervolgens naar "OpenSSH SSH Server" in het venster van services.msc en start deze service. Zet het opstarttype op "Automatic" zodat de service automatisch start bij het opstarten van de VM.

Open vervolgens WinSCP (of een gelijkaardig programma) op jouw persoonlijk toestel. Vul de volgende gegevens in:
- Bestandsprotocol: SFTP
- Adres doelcomputer (= hostnaam): localhost
- Poortnummer: 2223 (of de poort die je hebt ingesteld)
- Gebruikersnaam: Administrator
- Wachtwoord: P@$$w0rd (of het wachtwoord dat je hebt ingesteld)
Je mag deze gegevens opslaan zodat je deze niet telkens opnieuw moet ingeven. Klik op "Inloggen" om de verbinding te maken.

Klik op "Akkoord" (of gelijkaardig) om de host sleutel te accepteren. In het linkerdeel van het scherm zie je nu de bestanden van jouw persoonlijk toestel en in het rechterdeel de bestanden van jouw Windows Server VM.
Navigeer links naar de locatie waar je het zip-bestand hebt uitgepakt en rechts naar de map "Documents" van jouw Windows Server VM. Sleep het script van links naar rechts om het te kopiëren.

Processen in Windows¶
Overzicht commando's¶
Volgende tabel bevat een overzicht van alle commando's die aan bod zullen komen tijdens deze opdracht.
| Omschrijving | Commando Windows (PowerShell) |
|---|---|
| Overzicht alle processen | Get-Process |
| Overzicht processen per gebruiker | .\Get-UserProcess.ps1 (*) |
| Overzicht details van een proces | Get-Process -Id <procesid> |
| Overzicht processtructuur | .\Get-ProcessTree.ps1 (*) |
| Overzicht alle actieve processen met automatische verversing |
.\Get-ProcessTop.ps1 (*) |
| Id van proces zoeken | (Get-Process -Name <procesnaam>).Id |
| Proces stopzetten | Stop-Process <id> |
| Proces laten wachten | Start-Sleep <seconden> |
| Proces op achtergrond starten | Start-Process -NoNewWindow <commando> Start-Job { <commando> } |
Commando's aangeduid met (*) zijn geen standaard ingebouwde commando's in PowerShell. Dit zijn zelfgemaakte scripts die je tijdens de Voorbereiding gedownload hebt. Om deze uit te voeren, plaats je de bestanden in een map op je virtuele machine. Vervolgens navigeer je in PowerShell naar die map (gebruik het commando cd) en voer je het script uit als volgt: .\<bestandsnaam>. Bijvoorbeeld, om een overzicht van processen van de gebruiker te krijgen, voer je in de PowerShell-console het volgende commando uit: .\Get-UserProcess.ps1, ervan uitgaande dat het bestand "Get-UserProcess.ps1" in de huidige map staat.
PowerShell terminal aan taakbalk vastmaken¶
Net zoals in Linux zullen we de PowerShell-terminal aan de taakbalk vastmaken zodat we deze later sneller kunnen openen. Dit doe je als volgt:
- Klik op het Windows-logo linksonder.
- Typ "PowerShell".
- Klik met de rechtermuisknop op "Windows PowerShell" en kies "Aan taakbalk vastmaken".
- Je hebt nu het "Windows PowerShell"-icoontje onderaan in je taakbalk.

PowerShell toestaan om externe scripts uit te voeren¶
Aangezien we als "administrator" inloggen op onze server, hebben we altijd de mogelijkheid om ook scripts die niet van Windows zelf zijn uit te voeren. Op je eigen computer zal het echter niet altijd lukken om zomaar andere scripts uit te voeren. De "ExecutionPolicy" moet namelijk minstens de waarde "RemoteSigned" hebben. Controleer deze instelling op je Windows Server VM door het volgende commando in te voeren in PowerShell:
| PowerShell | |
|---|---|
Op je server zou deze standaard de waarde "RemoteSigned" moeten teruggeven. Als dit niet het geval is, kan je deze waarde instellen via het volgende commando en kies "A" als antwoord:
| PowerShell | |
|---|---|
Controleer daarna of deze waarde daadwerkelijk is ingesteld met het eerder genoemde commando. Voer deze stappen ook uit op je host computer (indien Windows als OS) zodat je ook de oefeningen in latere opdrachten of voor andere vakken in PowerShell kan uitvoeren. Als de scripts toch nog niet worden uitgevoerd, gebruik je als "ExecutionPolicy" het beste "Unrestricted". Deze instelling gebruik je alleen in de VM en niet op je host computer.
Overzicht processen¶
Zorg ervoor dat je in PowerShell in dezelfde map zit als waar je de scripts hebt opgeslagen, dit zou "Documents" moeten zijn. Blijf in deze map voor de rest van de opdracht! Voer het volgende commando uit om naar de map te gaan:
| PowerShell | |
|---|---|
We beginnen met het tonen van een overzicht van de huidige processen die op ons systeem draaien. Voer hiervoor het volgende commando uit:
| PowerShell | |
|---|---|
Als je het bovenstaande commando uitvoert, zal een lijst van processen te zien zijn, vergelijkbaar met de onderstaande afbeelding:

Let op: niet alle processen worden via deze weg getoond!
Via deze uitvoer zien we als belangrijkste gegevens het id dat elk proces heeft (Id), de verbruikte CPU-tijd (CPUs) en de naam van het proces (ProcessName).
Je kan deze informatie ook vergelijken met de informatie die grafisch beschikbaar is via de "Task Manager". Open deze grafische applicatie (Rechts klikken op taakbalk => Task Manager) en open "More Details". Activeer nu de kolom voor "PID" door rechts te klikken op een kolomnaam en deze aan te vinken. Zoek nu voor een aantal processen op basis van hun id de informatie op in zowel de terminaluitvoer als het grafische venster. Gevonden? Zoals je merkt, komt de naam niet altijd overeen!

Probeer nu om de details van een van jouw eigen processen op te vragen in de shell.
Je kan ook via de terminal een overzicht vragen van de meest belastende processen op jouw systeem. Dit doe je door het script Get-ProcessTop uit te voeren. De uitvoer wordt elke seconde automatisch bijgewerkt. Stoppen doe je via de toetsencombinatie "Ctrl + C".
| PowerShell | |
|---|---|

Processtructuur¶
We kunnen ook een overzicht krijgen van alle processen in een boomstructuur. Het voordeel van deze structuur is dat we de onderlinge samenhang van processen kunnen zien. Met andere woorden, we zien de ouder van elk proces en zijn kinderen. Voer hiervoor het script Get-ProcessTree uit.
| PowerShell | |
|---|---|

Wat valt op in dit overzicht? De boomstructuur van de processen heeft een aantal hoofdtakken die starten vanaf wininit, winlogon en explorer. Deze laatste tak bevat alle processen die jij als gebruiker hebt gestart of die automatisch voor jou werden gestart bij het aanmelden (bijvoorbeeld vboxtray). Open bijvoorbeeld "Internet Explorer" en voer daarna het script voor de processtructuur opnieuw uit. Je zal zien dat iexplore is toegevoegd onder de hoofdtak explorer.

Nieuw proces opstarten¶
Start een aantal nieuwe grafische processen naar keuze, bijvoorbeeld: een nieuwe PowerShell-terminal, Verkenner, browser, rekenmachine, enzovoort. Probeer deze processen terug te vinden in de lijst van processen op de verschillende manieren zoals in de vorige paragraaf besproken.
Je kan ook een proces (of toepassing) rechtstreeks starten vanuit de PowerShell-terminal. Probeer op deze manier een nieuwe Kladblok en rekenmachine te starten.
Om het commando te achterhalen, kan je het proces eerst grafisch starten en vervolgens via de "Task Manager" de naam achterhalen.
Wat is het commando dat je hebt gebruikt?
- Nieuwe kladblok:
notepadofnotepad.exe - Nieuwe rekenmachine:
calcofcalc.exe
Net zoals in Linux kunnen we ook in Windows processen op de achtergrond starten in de PowerShell-terminal.
| PowerShell | |
|---|---|
Als extra zullen we ook kort toelichten hoe een proces automatisch gestart kan worden. We zullen in Windows inplannen dat elke minuut een nieuwe rekenmachine geopend wordt. Open hiervoor de "Task Scheduler".

Je krijgt hier een overzicht van alle actieve taken die reeds gepland zijn en indien er taken gelopen hebben, kan je hier ook de details raadplegen. Om elke minuut een instantie van de rekenmachine te starten, zullen we een nieuwe taak moeten toevoegen:
- Klik op "Create Basic Task".
- Create a basic task: Kies zelf een naam naar keuze en vul deze in. Kies dan "Next".
- Trigger: Selecteer "Daily" en kies dan "Next".
- Daily: Verander de tijd naar "00:00:00" en kies dan "Next".
- Action: Selecteer "Start a program" en ga verder.
- Start a program: Vul "calc.exe" in onder "Program/script" en kies dan "Next".
- Finish: Vink het vakje aan voor "Open the properties dialog for this task when I click finish" en kies "Finish".
- In het eigenschappenvenster van de taak ga je naar het tabblad "Triggers".
- Selecteer jouw trigger en kies "Edit".
-
Pas nu de velden aan zoals in onderstaande afbeelding en kies dan "Ok".

-
Keer in het vorige scherm terug naar het tabblad "Settings".
- Vink hier "Run task as soon as possible after scheduled start is missed" aan.
- Klik tenslotte op "OK" om het eigenschappenvenster af te sluiten.
Nu zou er elke minuut een instantie van calc.exe moeten worden geopend. Na een aantal minuten kan je het automatisch openen ongedaan maken door in het scherm van "Task Scheduler" in de boomstructuur links voor "Task Scheduler Library" te kiezen. Rechts in het overzicht kies je dan jouw aangemaakte taak. Klik rechts op deze taak en kies voor "Delete".

Proces stoppen¶
Voorlopig hebben we alleen processen grafisch stopgezet door het "kruisje" rechtsboven in de applicatie te gebruiken. Het is ook mogelijk om via de "Task Manager" een proces te beëindigen. Dit doe je door met de rechtermuisknop op de naam van een proces te klikken en vervolgens "End Task" te kiezen. In een serveromgeving heb je als beheerder vaak geen GUI, maar moeten processen toch kunnen worden stopgezet. Hiervoor gebruiken we het commando Stop-Process <proces id>. Open, indien je deze al had gesloten, een nieuw notepad-proces op de achtergrond via jouw terminal. In tegenstelling tot Linux krijg je hier niet direct het id van het gestarte proces te zien. Zoek dit dus zelf op!
Voer nu in de terminal het volgende commando uit waarbij je <procesid> vervangt door het procesid van jouw tekstverwerker.
| PowerShell | |
|---|---|

Als alles goed gaat, zal notepad nu afgesloten zijn. Controleer dit via de eerder beschreven commando's en via de "Task Manager".
Als variant op het stopzetten van een proces kan je het ook pauzeren. Dit doe je als volgt:
| PowerShell | |
|---|---|
Probeer nu jouw terminalproces 5 seconden te laten slapen. Je zal merken dat jouw terminal tijdelijk bevroren is. Probeer daarna jouw terminal op de achtergrond te laten slapen.
Hoe doe je dit?
Op voorgrond slapen:
| PowerShell | |
|---|---|
Op achtergrond slapen, dit werkt niet met Start-Process -NoNewWindow:
| PowerShell | |
|---|---|
Voer ten slotte het volgende commando uit:
| PowerShell | |
|---|---|
Jouw terminal zal in een oneindige lus blijven hangen en elke seconde tekst produceren. Sluit het commando af op een manier naar keuze zonder de terminal af te sluiten. Als laatste sluit je jouw VM af door in de terminal het commando Stop-Computer in te voeren. Dit zal alle processen afsluiten en jouw virtuele machine stopzetten.