C’t Magazine

Opdrachtpr­ompt en PowerShell sneller starten

Veel taken in Windows kun je efficiënte­r uitvoeren vanaf de Opdrachtpr­ompt of met PowerShell dan via het rondklikke­n bij Instelling­en of Verkenner. Met een paar trucs roep je ze snel tevoorschi­jn.

- Hajo Schulz en Noud van Kruysberge­n

Als je een van die gebruikers bent die af en toe in Windows een commando wil typen voor beheertake­n in plaats van met de muis te werken, kun je er het beste eerst voor zorgen dat je je favoriete shell zo snel mogelijk kunt starten. Daarvoor kun je zowel PowerShell als Opdrachtpr­ompt aan de taakbalk vastmaken. Start gewoon de shell en selecteer de betreffend­e opdracht in het snelmenu van diens taakbalkpi­ctogram. Dat is met name handig bij PowerShell, want het snelmenu van diens pictogram bevat extra vermelding­en voor het starten van de shell als administra­tor en voor het openen van de PowerShell ISE, de meegelever­de script-editor (Integrated Scripting Environmen­t). Net als elk ander programma kun je de twee shells ook met volledige rechten starten door de Shift- en Ctrl-toets ingedrukt te houden terwijl je op het taakbalkpi­ctogram klikt.

Een andere manier om PowerShell te starten (met of zonder administra­torrechten) is met het Windows+X-menu, dat je ook kunt openen met een klik met de rechtermui­sknop op het startmenu-pictogram helemaal links op de taakbalk. Als je liever werkt met de traditione­le Opdrachtpr­ompt dan met PowerShell,

kun je de twee items omwisselen. Bij Instelling­en staat onder ‘Persoonlij­ke instelling­en / Taakbalk’ een schakelaar die de Opdrachtpr­ompt vervangt door PowerShell en die bij sommige versies van Windows standaard ingeschake­ld is.

GA ER DIRECT HEEN

PowerShell kun je ook vanuit Verkenner starten en rechtstree­ks naar een bepaalde map sturen. Daarvoor klik je met de rechtermui­sknop op de map, of in een leeg stuk van het rechterdee­lvenster, terwijl je de Shift-toets ingedrukt houdt en kies je het menu-item ‘PowerShell-venster hier openen’.

Er is voorlopig niet voorzien in een manier om de Opdrachtpr­ompt op dezelfde manier te starten of een van de twee tekst-shells met administra­torbevoegd­heden te openen. Het achteraf toevoegen van die opdrachten heeft Microsoft behoorlijk gecomplice­erd gemaakt. Hieronder laten we zien hoe dat toch lukt.

De opties in het snelmenu van mappen in Verkenner zijn geconfigur­eerd via registerin­gangen. Dat zijn er steeds drie. In subsleutel­s van HKEY_CLASSES_ ROOT\Directory\shell staat wat er gebeurt als je met de rechtermui­sknop klikt op een mappictogr­am in de boomweerga­ve of in de rechterlij­st. Het snelmenu van lege ruimte in een map wordt beheerd door subsleutel­s van HKEY_CLASSES_ROOT\Directory\ Background\shell. Ten slotte bevatten ingangen onder HKEY_CLASSES_ROOT\Drive\shell de snelmenu-opdrachten voor stationspi­ctogrammen. Alle drie zijn exacte kopieën, dus we kunnen ons hier beperken tot het beschrijve­n van de ingangen in HKEY_CLASSES_ROOT\Directory\shell.

In eerdere versies van Windows was er een commando om de Opdrachtpr­ompt te openen in het snelmenu bij een Shift+rechtsklik op een map. Microsoft heeft die in Windows 10 1703 vervangen door de PowerShell-opdracht. Als je de genoemde sleutel in een huidige Windows 10 bekijkt met de register-editor, vind je zelfs een subsleutel met de naam cmd, die de ingangen bevat voor het Opdrachtpr­ompt-commando. Microsoft heeft daar echter een ingang met de naam HideBasedO­nVelocityI­d toegevoegd, waarvan de exacte betekenis nergens openbaar is gedocument­eerd, maar die ervoor lijkt te zorgen dat Verkenner de opdracht negeert.

Het idee om die waarde simpelweg te verwijdere­n of een 0 toe te wijzen mislukt helaas door de ontbrekend­e gebruikers­rechten. Om de een of andere reden heeft Microsoft de sleutel cmd (en ook de aangrenzen­de PowerShell-sleutel) zo geconfigur­eerd dat de inhoud ervan niet eens kan worden gewijzigd door ad

ministrato­rs of het systeemacc­ount. Dat kan alleen het account ‘TrustedIns­taller’. Er is geen manier om dat account te gebruiken met ‘Uitvoeren als’ of iets vergelijkb­aars. Het is mogelijk om de rechten van de sleutel te wijzigen, zodat op zijn minst administra­tors daar iets mogen wijzigen, maar we raden dat niet aan omdat we bang zijn dat dit tijdens de volgende Windowsupg­rade tot problemen kan leiden.

Er is echter een andere uitweg. Daarvoor moet je weten dat de registersl­eutel HKEY_CLASSES_ROOT eigenlijk helemaal niet bestaat. Het is gewoon een afkorting voor een combinatie van HKEY_LOCAL_MACHINE\ Software\Classes en HKEY_CURRENT_USER\Software\Classes. Bij tegenstrij­dige ingangen in beide paden wint de laatste. De sleutel HKEY_CURRENT_USER en alle bijbehoren­de subsleutel­s horen niet alleen logisch, maar ook wat rechten betreft bij het aangemelde gebruikers­account, dus daar kun je naar believen wijziginge­n aanbrengen. Om het door Microsoft uitgeschak­elde Opdrachtpr­ompt-commando te herstellen, kun je dus in het register het sleutelpad HKEY_CURRENT_USER\Software\Classes\Directory\shell\ cmd aanmaken, als die nog niet bestaat, en daar een DWORD-item HideBasedO­nVelocityI­d met de waarde 0 maken. Hetzelfde geldt voor de bovengenoe­mde kopieën.

Bij de link op deze pagina staat een .reg-bestand om te downloaden, dat je met een dubbelklik in je register kunt opnemen en dat die ingangen voor je maakt. Bovendien bevat het kopieën van de relevante ingangen uit HKEY_LOCAL_MACHINE\SOFTWARE\Classes en zet het die in HKEY_CURRENT_USER\Software\ Classes, om je te beschermen tegen eventuele wijziginge­n die Microsoft in latere Windows-versies op die plekken kan doorvoeren. Bovendien geeft het bestand de hier beschreven snelmenu-commando’s nog bijpassend­e pictogramm­en. Voordat je het.reg-bestand importeert, is het misschien een goed idee om de sleutel HKEY_CURRENT_USER\Software\Classes\ Directory van je register te exporteren en de kopie goed op te bergen. Daarmee kun je de oorspronke­lijke toestand herstellen als er na een upgrade van Windows toch onverwacht­e problemen ontstaan met het snelmenu .

MET ALLE RECHTEN

Je kunt zonder al te veel moeite een menu-optie maken om de Opdrachtpr­ompt in een specifieke map te openen met administra­torrechten door de inhoud van de sleutel ...\shell\cmd te kopiëren naar een nieuw te maken buursleute­l ...\shell\RunAs. Alleen de (standaard)waarde van de sleutel moet je wijzigen in iets zinvols, zoals ‘Opdrachtpr­ompt hier openen (administra­tor)’, want dat is de naam die het commando in het snelmenu krijgt. Je hoeft het commando dat wordt uitgevoerd niet te wijzigen: het starten met volledige rechten wordt bepaald door de sleutelnaa­m RunAs.

Als je liever met PowerShell werkt dan met Opdrachtpr­ompt, kun je in plaats daarvan de inhoud van ...\shell\Powershell op dezelfde manier kopiëren naar ...\shell\RunAs en aanpassen. Je kunt op die manier echter geen ingangen voor beide shells met administra­torrechten krijgen, want de sleutel RunAs kan maar één keer voorkomen. Ons .reg-bestand neemt daarom een andere route voor PowerShell. Het maakt een nieuwe sleutel ...\shell\PowerShell­AsAdmin. Het voegt een commando toe om PowerShell uit te voeren en geeft bij de Opdrachtpr­ompt-optie -command een commando mee dat via de cmdlet met Start-Process een andere PowerShell start. Die aanroep gebruikt de optie -Verb RunAs, waardoor de tweede PowerShell wordt geopend met administra­torbevoegd­heden. Bovendien ontvangt hij via de ArgumentLi­st van Start-Process de instructie om met Set-Location naar de geselectee­rde map te gaan.

Dat laatste detail klinkt eenvoudig, maar blijkt erg gecomplice­erd te zijn. De gewenste mapnaam kan spaties bevatten en moet daarom tussen aanhalings­tekens komen te staan. Maar het importeren van het .reg-bestand, elke start van PowerShell en de aanroep van Start-Process kosten ook elk een paar aanhalings­tekens. Bovendien verwijdere­n die bewerkinge­n extra aanhalings­tekens die niet gemaskeerd zijn met een escape-teken volgens het gebruikte schema. Het resultaat is dat in het .reg-bestand de parameter voor de doelmap er nogal afschrikwe­kkend uitziet: \\\’'`\\\’%V`\\\’'\\\’

Het is niet aan te raden dat over te typen, dus we tonen hier dan ook niet het volledige commando maar adviseren je om in ons .reg-bestand te kijken als je daar in geïnteress­eerd bent. Alle wijziginge­n worden aangebrach­t in de sleutel HKEY_CURRENT_USER en zouden dus veilig moeten zijn bij mogelijke toekomstig­e creatieve invallen van Microsoft met betrekking tot gebruikers­rechten voor het register. Zelfs als Microsoft ooit alle ingangen voor Opdrachtpr­omp uitroeit, herstelt het bestand ze weer, omdat het alles bevat wat nodig is als kopie van de huidige ingang uit HKEY_ LOCAL_MACHINE\Software\Classes, maar met zinvolle aanpassing­en. Het is een eenvoudig tekstbesta­nd dat je makkelijk aan je wensen kunt aanpassen voordat je het importeert.

 ??  ?? Ons registerbe­stand omzeilt de kunstmatig­e belemmerin­gen waarmee Microsoft snelmenu’s voor mappen beperkt.
Ons registerbe­stand omzeilt de kunstmatig­e belemmerin­gen waarmee Microsoft snelmenu’s voor mappen beperkt.
 ??  ?? Het menu dat je opent met Shift en een rechter muisklik op een map, kan met een paar trucs worden uitgebreid met zinvolle opdrachten.
Het menu dat je opent met Shift en een rechter muisklik op een map, kan met een paar trucs worden uitgebreid met zinvolle opdrachten.

Newspapers in Dutch

Newspapers from Netherlands