13 handige commando's voor de Opdrachtprompt
Tegenwoordig gebruiken we de Opdrachtprompt lang niet meer zo vaak als vroeger en in Windows 10 en 11 hoeft dat eigenlijk ook niet meer. Toch betekent dat niet dat je de Opdrachtprompt helemaal niet meer hoeft te gebruiken. Je kunt er namelijk handige commando's mee instellen, die het computergebruik een stuk aangenamer maken. Wij bespreken 13 handige Opdrachtprompt-commando's.
Windows (en trouwens ook veel moderne Linux-distributies) heeft zijn succes vooral te danken aan de gebruiksvriendelijkheid van de grafische interface (gui). Toch heeft ook de zogenoemde cli (command line interface) zeker een bestaansrecht. Sommige functies zijn namelijk lastig of helemaal niet terug te vinden in de grafische interface. Opdrachtregelcommando’s kun je doorgaans ook nauwgezet aansturen met behulp van parameters. Bovendien laten zulke commando’s zich probleemloos opnemen in batchbestanden en kun je die automatisch laten uitvoeren vanuit het aanmeldingsscript van een gebruiker of via de taakplanner.
Er zijn meerdere manieren om in de opdrachtprompt te komen. Vanuit taakbeheer bijvoorbeeld, of via het contextmenu (rechtermuisknop op een bestand en Openen in opdrachtprompt) of door op Start / Uitvoeren te drukken (of toets Windows-toets+R) en in het venstertje dat verschijnt cmd in te voeren gevolgd door Enter.
Hier vind je een overzicht van de beschikbare cmd-commando’s in Windows (klik een commando aan voor bijhorende parameters en voorbeelden). In dit artikel geven we eerst enkele voorbeelden die duidelijk maken hoe krachtig (en nuttig) zulke commando’s kunnen zijn. Daarna tonen we je hoe je die kunt inzetten bij automatiseringsscenario’s.
©PXimport
Cmd-venster
Wanneer je via het cmd-commando naar de opdrachtprompt gaat, beland je standaard in je eigen profielmap (c:\Users\
©PXimport
01 Mapinhoud
Om de inhoud van een map te kennen raadpleeg je de Verkenner. Logisch, maar vanuit de opdrachtregel kom je specifieke informatie vaak sneller te weten. Om een idee te krijgen van de mogelijkheden voer je het commando dir /? Uit. De parameter /? kun je trouwens bij nagenoeg alle commando’s gebruiken om meer uitleg te krijgen. Om een venster weer leeg te maken gebruik je het cls-commando (clear screen). Het komt er nu op aan de beschikbare parameters slim te combineren. Stel, je wilt een overzicht van alle bestanden, met de recentste bovenaan. Dan doe je dat met dir /O-D.
Merk ook bijvoorbeeld het verschil op tussen dir *, dir /A * en dir /B *. Dir /A toont je ook verborgen (systeem)bestanden en dir /B beperkt de uitvoer tot de bestandsnamen zonder verdere gegevens.
De mapinhoud afdrukken kan trouwens door achteraan je commando iets als >mapinhoud.txt toe te voegen, waarna je met Kladblok het txt-bestand kunt openen en afdrukken.
©PXimport
02 ADS
Een leuk experiment is het toevoegen van ADS-data (alternate data streams) aan bestanden, althans in een ntfs-omgeving. Creëer met Kladblok een tekstbestand dat je wilt verbergen (dat noemen we even geheim.txt). Vervolgens voer je het commando type geheim.txt > saai.txt:onzichtbaar.txt uit. Dit commando zorgt ervoor dat het bestand geheim.txt als ADS-data (met de naam onzichtbaar.txt) wordt opgenomen in het bestand saai.txt. Je mag geheim.txt nu verwijderen. Wanneer je dir saai.txt uitvoert, merk je dat dit bestand leeg is (0 bytes). Echter, voer je dir /R saai.txt uit, dan duiken alsnog de ADS-data van saai.txt op. Je krijgt de inhoud van die ADS te zien via het commando "c:\system\32\notepad.exe" saai.txt:onzichtbaar.txt. Op deze manier kun je dus bestanden verbergen in andere bestanden.
©PXimport
03 Machtigingenbeheer
Vanuit de gui kun je uiteraard ook machtigingen van gebruikers op mappen en bestanden regelen, maar dat kan sneller vanuit de cli. Bovendien heb je via de cli meer mogelijkheden in Windows 10 Home. Je regelt zowat alles via het icacls-commando: hierin lees je trouwens ‘acl’, wat staat voor ‘access control lists’ oftewel ntfs-machtigingen.
Om de huidige machtigingen op een map of bestand te weten te komen volstaat het commando icacls <naam_van_map_of_bestand>. Je kunt ook in één keer alle huidige machtigingen van alle bestanden in een bepaalde map en bijhorende submappen bewaren om die, na eventuele experimenten, snel weer terug te zetten. Machtigingen bewaren doe je als volgt icacls <pad_naar_map>\* /save aclbestand /T. Om de machtigingen die je in het bestand aclbestand hebt bewaard snel terug te zetten, voer je als administrator het commando icacls <pad_naar_map> /restore aclbestand uit. Om de machtigingen op een bestand door andere te vervangen, kun je een commando uitvoeren als icacls <bestandsnaam> /grant:r <gebruikersnaam>: F (F staat voor Full access). Let wel, als je de parameter :r (replace) weglaat, dan worden de nieuwe machtigingen aan de al bestaande toegevoegd in plaats van die te vervangen.
©PXimport
04 Connectiviteit
Zelfs wanneer je nauwelijks met de opdrachtprompt bekend bent, heb je vast al eens het commando ipconfig of ipconfig /all uitgevoerd. En wellicht zal ook het ping-commando je niet onbekend zijn. Voer je bijvoorbeeld ping www.computertotaal.nl uit, dan hoor je van de webserver met het bijhorende ip-adres viermaal een antwoord te krijgen.
Veel minder bekend is het arp-commando (address resolution protocol). Dat laat je toe een verbinding te maken met een host zonder vooraf het mac-adres van dat apparaat te kennen. Zo’n arp-verzoek wordt namelijk gebroadcast, wat maakt dat elk apparaat in het lokale netwerk dit verzoek ontvangt. Als het goed is zal het apparaat met dat ip-adres reageren door een arp-reply naar de vragende partij te sturen. Een arp-commando kan dus nuttig zijn om op afstand het mac-adres te weten te komen maar ook om te weten of het apparaat actief is, zelfs als dit niet reageert op ping-verzoeken. Doe gerust zelf de test (we gaan ervan uit dat je de firewall van apparaat B zo hebt ingesteld dat echoaanvragen van ping worden geblokkeerd). Voer nu de volgende commando’s als administrator uit:
arp -d * (maak de huidige arp-tabel leeg)
arp -a (bewijs dat de arp-tabel geen ingang heeft voor apparaat B)
ping <ip-adres apparaat B> (geen response: 4x time-outs)
arp -a (bewijs dat apparaat B met mac-adres is toegevoegd en dus actief is).
©PXimport
05 Symlinks
Veel gebruikers zijn niet bekend met zogenoemde symbolische links (kortweg symlinks). Dat zijn een soort geavanceerde snelkoppelingen naar bestanden of mappen, waarbij het erop lijkt dat het effectief om dat bestand of die map gaat in plaats van om een snelkoppeling. Het zou bijvoorbeeld kunnen dat een of ander programma vereist dat data in <map x> terechtkomen, maar dat jij dat liever in <map y> ziet gebeuren.
Dat regel je als volgt. Ga als administrator naar de opdrachtprompt en over het volgende commando uit: mklink /J <pad_naar_map_y> <pad_naar_map_x> (plaats de paden tussen dubbele, rechte aanhalingstekens als er spaties in voorkomen). Je zult merken: alle data die in <map y> belanden, komen automatisch (ook) in <map x> terecht.
Verwant hiermee is het commando mklink /D, waarmee je in een bepaalde map een of meer links creëert die telkens naar een andere map verwijzen. Alle data uit die mappen, zijn dan in één keer bereikbaar door naar de map met die link(s) te navigeren. Dat kan bijvoorbeeld handig zijn als je voor een project geregeld data moet benaderen die over diverse mappen verspreid zijn. Dat doe je als volgt vanuit een (lege) map: mklink /D financieel <pad_naar_eerste_map>, mklink /D logistiek <pad_naar_tweede_map> enzovoort.
©PXimport
Alternatieven
De standaardconsole voor de ingebouwde opdrachtprompt in Windows is behoorlijk Spartaans. Er zijn gratis alternatieven die meer opties en flexibiliteit bieden, zoals ColorConsole, dat ondersteuning biedt voor onder meer tabbladen, export naar html en rtf, snelle mapomschakelingen vanuit een taakbalk enzovoort. Je kunt ook een compleet nieuwe opdrachtregel-omgeving inzetten. Zo zet Microsoft sinds Windows 7 steeds meer in op PowerShell. Deze heuse scripting-omgeving is weliswaar veel krachtiger dan de traditionele opdrachtprompt, maar tegelijk ook veel complexer. Je start deze omgeving op door het commando powershell uit te voeren in een opdrachtvenster of je voert het programma PowerShell ISE (Integrated Scripting Environment) uit als je behoefte hebt aan een grafische scriptomgeving. PowerShell is zeer geavanceerd en kan ook nog eens eenvoudig worden uitgebreid met nieuwe functies. Met de tool kun je vrijwel het volledige besturingssysteem onder de motorkap bedienen, zonder dat hier een muis aan te pas komt. Dit kan bijvoorbeeld door maken van scripts. In dit artikel geven we je wat tips over hoe je PowerShell het beste kunt gebruiken.
©PXimport
Handig hulpmiddeltje: Chocolatey
Je kunt ook het proces waarin je software op je computer binnenhaalt en installeert automatiseren. Door middel van het tooltje Chocolatey kun je met commando’s in de opdrachtprompt software downloaden, installeren en updaten. Op het moment van schrijven zijn er meer dan 8.000 populaire pakketten beschikbaar voor Chocolatey.
06 Shares
Wil je snel een overzicht van alle gedeelde mappen op je systeem, dan volstaat het commando net share. Om meer informatie over de respectieve shares op te vragen, voer je de opdracht net share <sharenaam> als administrator uit. Je verneemt dan onder meer het maximum aantal gebruikers dat deze share tegelijkertijd mag benaderen, evenals de machtigingen op deze share. Een nieuwe share creëren is uiteraard ook mogelijk. Dat doe je met een opdracht als net share fotos="c:\mediabestanden\mijn fotos". Wil je de share weer verwijderen dan zorgt net share fotos /delete daar wel voor. Een gedeelde netwerkschijf aan een vrije stationsletter koppelen kan ook, met net use x: \\<computernaam>\<sharenaam> <eventuele_wachtwoord> (de computernaam vind je bijvoorbeeld via Windows-toets+Pause). Wil je deze koppeling permanent maken zodat die ook bij een volgende Windows-sessie actief blijft, voeg dan /persistent:yes toe achteraan het commando.
©PXimport
07 Back-ups & kopieën
Standaard-kopieeroperaties voer je wellicht via de Verkenner uit. Dat kan, maar je zoekt hier tevergeefs naar extra functies. Het opdrachtregelcommando robocopy biedt veel meer geavanceerde mogelijkheden, zoals het parameteroverzicht je meteen duidelijk maakt. We beperken ons hier tot een paar eenvoudige voorbeelden.
Met het commando robocopy "c:\mijn documenten" f:\ /MIR zorg je ervoor dat de bronmap (c:\mijn documenten) automatisch naar de doelmap wordt gespiegeld (MIRrored). Let wel, tenzij je het commando door de parameter /XX laat volgen, worden reeds bestaande data in de doelmap verwijderd tijdens deze back-upoperatie. Ook nuttig om weten: de parameter /SEC zorgt ervoor dat de originele machtigingen behouden worden in de doelmap. En met /LOG:<tekstbestand> houd je een logboek van de operatie bij.
Sommige robocopy-opdrachten kunnen door de talrijke parameters behoorlijk complex worden. Gelukkig is er een optie om die opdrachten te bewaren; het volstaat achteraan /SAVE:<jobnaam> toe te voegen. Om diezelfde opdracht naderhand weer uit te voeren tik je dan robocopy /JOB:<jobnaam> in. Handig!
©PXimport
08 In batch
Een groot voordeel van opdrachtregelcommando’s is dat je die eenvoudig in een batchbestand kunt opnemen, zodat die commando’s in regel chronologisch na elkaar worden uitgevoerd zodra je het batchbestand aanroept (bijvoorbeeld vanuit de Windows-taakplanner). Zo’n bestand maak je gewoon aan met Kladblok en geef je de extensie .cmd mee.
Je zou bijvoorbeeld een batchbestand op je bureaublad kunnen plaatsen dat de volgende opdrachtregel bevat: net use x: \\<computernaam>\<sharenaam> /persistent:no [/user:<inlognaam> <wachtwoord>]. Dat maakt dat de netwerkverbinding pas actief wordt zodra je dit batchbestand met een muisklik uitvoert, zodat Windows bij het opstarten geen tijd verliest door te zoeken naar bijvoorbeeld een verbinding met een niet langer aangekoppelde externe schijf.
©PXimport
09 Batch: voorbeelden
In zijn eenvoudigste vorm is een batchbestand dus niets anders dan een chronologische opeenvolging van individuele opdrachtregelcommando’s. Iets als volgt bijvoorbeeld, waarbij de bronmap na de kopieeroperatie wordt leeggemaakt:
cls
xcopy c:\mijndata d:\backups /M/E/H/R/I/Y
del c:\mijndata\*.* /Q
Maar er zijn ook wel complexere constructies mogelijk, zoals in het volgende voorbeeld, waarin je alle bestanden met specifieke extensies van je schijf verwijdert:
@echo off
rem Dit batchbestand wist specifieke bestanden
title Selectieve bestandsverwijdering
echo Bezig met wissen …
for %%t in (tmp bak log) do del c:\*.%%t /s
echo Bestanden gewist!
pause
We hebben hier niet de ruimte om hier grondiger op in te gaan. Wil je je echter verder verdiepen in de mogelijkheden en syntax van batchbestanden: deze tiendelige cursus is een mooi vertrekpunt.
©PXimport
10 Aanmeldingsscript
Het is ook mogelijk een batchbestand (of een ander script) automatisch te laten uitvoeren zodra een specifieke gebruiker zich bij Windows aanmeldt. Dat kan in Windows Professional of hoger door Windows-toets+R in te drukken en vervolgens de opdracht lusrmgr.msc uit te voeren, waarna je de gewenste gebruiker aanklikt en het tabblad Profiel opent. Hier vul je dan de naam van het batchbestand in. Je kunt het echter ook regelen vanuit de opdrachtregel, zelfs in de Home-versies van Windows. Dat gaat via het commando net user <gebruikersnaam> /scriptpath:<naam_van_batchbestand>. Voorwaarde is wel dat je dit batchbestand plaatst in een gedeelde map met de sharenaam ‘netlogon’, waarbij je er ook voor zorgt dat die gebruiker minimaal leesrechten op die map krijgt toegekend.
©PXimport
11 Taakplanner
Een batchbestand als aanmeldingsscript instellen is één manier om het automatisch te laten uitvoeren tijdens de login, maar het kan ook anders: met behulp van de ingebouwde Taakplanner. Die is trouwens veel flexibeler, want je kunt een batchbestand (of een ander script of programma) bijvoorbeeld ook laten uitvoeren tijdens het opstarten, op een specifiek tijdstip, bij het vergrendelen van het systeem enzovoort.
Wij willen bijvoorbeeld elke vrijdagnamiddag een batchbestand laten uitvoeren dat met specifieke opties een schijfopruiming start. In dit batchbestand nemen we dan (onder meer) het commando cleanmgr /sagerun:1 op (althans nadat we cleanmgr /sageset:1 vooraf één keer vanop de opdrachtregel hadden uitgevoerd en daar de gewenste opties hadden ingesteld).
©PXimport
12 Taakplanner: uitvoer
Klik het vergrootglaspictogram aan in de Windows taakbalk en zoek naar taak. Start Taakplanner op en klik in het rechterpaneel op Taak maken (Basistaak maken kan ook, maar geeft je minder opties). Geef je taak een geschikte naam mee en zet desgewenst een vinkje bij Uitvoeren ongeacht of gebruiker wel of niet is aangemeld. Open het tabblad Triggers, druk op de knop Nieuw en kies (bijvoorbeeld) Gepland bij Start deze taak, waarna je het gewenste tijdstip en frequentie instelt (bijvoorbeeld Elke 1 vrijdag, om 16:00). Bevestig met OK en open het tabblad Acties. Klik hier op Nieuw en verwijs via Bladeren naar je batchbestand. Bevestig met OK (2x) en vul desgevraagd je wachtwoord in. Als het goed is vind je nu de taak terug in het linkerpaneel, bij Task Scheduler-bibliotheek. Daar hoef je alvast niet meer aan te denken!
©PXimport
13 Netwerkverbindingen
Het commando netstat geeft je een overzicht van de actieve verbindingen, inclusief IP-adres en poortnummer van zender en ontvanger. Voer ook eens de opdracht netstat /? uit om een idee te krijgen van de talrijke parameters. Zo geeft netstat -s je een mooi statistisch overzicht per netwerkprotocol (IP, ICMP, TCP en UDP), wat handig kan zijn bij het oplossen van netwerkproblemen. Met netstat -o krijg je ook de PID (process identifier) te zien van de processen. Via Windows Taakbeheer, waar je Beeld / Kolommen selecteren / Proces-id selecteert, kun je dan te weten komen welke toepassingen daarvoor verantwoordelijk zijn.