Opdrachtprompt en PowerShell sneller starten
Veel taken in Windows kun je efficiënter uitvoeren vanaf de Opdrachtprompt of met PowerShell dan via het rondklikken bij Instellingen of Verkenner. Met een paar trucs roep je ze snel tevoorschijn.
Als je een van die gebruikers bent die af en toe in Windows een commando wil typen voor beheertaken 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 Opdrachtprompt aan de taakbalk vastmaken. Start gewoon de shell en selecteer de betreffende opdracht in het snelmenu van diens taakbalkpictogram. Dat is met name handig bij PowerShell, want het snelmenu van diens pictogram bevat extra vermeldingen voor het starten van de shell als administrator en voor het openen van de PowerShell ISE, de meegeleverde script-editor (Integrated Scripting Environment). 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 taakbalkpictogram klikt.
Een andere manier om PowerShell te starten (met of zonder administratorrechten) is met het Windows+X-menu, dat je ook kunt openen met een klik met de rechtermuisknop op het startmenu-pictogram helemaal links op de taakbalk. Als je liever werkt met de traditionele Opdrachtprompt dan met PowerShell,
kun je de twee items omwisselen. Bij Instellingen staat onder ‘Persoonlijke instellingen / Taakbalk’ een schakelaar die de Opdrachtprompt vervangt door PowerShell en die bij sommige versies van Windows standaard ingeschakeld is.
GA ER DIRECT HEEN
PowerShell kun je ook vanuit Verkenner starten en rechtstreeks naar een bepaalde map sturen. Daarvoor klik je met de rechtermuisknop op de map, of in een leeg stuk van het rechterdeelvenster, 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 Opdrachtprompt op dezelfde manier te starten of een van de twee tekst-shells met administratorbevoegdheden te openen. Het achteraf toevoegen van die opdrachten heeft Microsoft behoorlijk gecompliceerd gemaakt. Hieronder laten we zien hoe dat toch lukt.
De opties in het snelmenu van mappen in Verkenner zijn geconfigureerd via registeringangen. Dat zijn er steeds drie. In subsleutels van HKEY_CLASSES_ ROOT\Directory\shell staat wat er gebeurt als je met de rechtermuisknop klikt op een mappictogram in de boomweergave of in de rechterlijst. Het snelmenu van lege ruimte in een map wordt beheerd door subsleutels van HKEY_CLASSES_ROOT\Directory\ Background\shell. Ten slotte bevatten ingangen onder HKEY_CLASSES_ROOT\Drive\shell de snelmenu-opdrachten voor stationspictogrammen. Alle drie zijn exacte kopieën, dus we kunnen ons hier beperken tot het beschrijven van de ingangen in HKEY_CLASSES_ROOT\Directory\shell.
In eerdere versies van Windows was er een commando om de Opdrachtprompt 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 Opdrachtprompt-commando. Microsoft heeft daar echter een ingang met de naam HideBasedOnVelocityId toegevoegd, waarvan de exacte betekenis nergens openbaar is gedocumenteerd, maar die ervoor lijkt te zorgen dat Verkenner de opdracht negeert.
Het idee om die waarde simpelweg te verwijderen of een 0 toe te wijzen mislukt helaas door de ontbrekende gebruikersrechten. Om de een of andere reden heeft Microsoft de sleutel cmd (en ook de aangrenzende PowerShell-sleutel) zo geconfigureerd dat de inhoud ervan niet eens kan worden gewijzigd door ad
ministrators of het systeemaccount. Dat kan alleen het account ‘TrustedInstaller’. Er is geen manier om dat account te gebruiken met ‘Uitvoeren als’ of iets vergelijkbaars. Het is mogelijk om de rechten van de sleutel te wijzigen, zodat op zijn minst administrators daar iets mogen wijzigen, maar we raden dat niet aan omdat we bang zijn dat dit tijdens de volgende Windowsupgrade tot problemen kan leiden.
Er is echter een andere uitweg. Daarvoor moet je weten dat de registersleutel 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 tegenstrijdige ingangen in beide paden wint de laatste. De sleutel HKEY_CURRENT_USER en alle bijbehorende subsleutels horen niet alleen logisch, maar ook wat rechten betreft bij het aangemelde gebruikersaccount, dus daar kun je naar believen wijzigingen aanbrengen. Om het door Microsoft uitgeschakelde Opdrachtprompt-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 HideBasedOnVelocityId met de waarde 0 maken. Hetzelfde geldt voor de bovengenoemde 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 wijzigingen die Microsoft in latere Windows-versies op die plekken kan doorvoeren. Bovendien geeft het bestand de hier beschreven snelmenu-commando’s nog bijpassende pictogrammen. 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 oorspronkelijke toestand herstellen als er na een upgrade van Windows toch onverwachte problemen ontstaan met het snelmenu .
MET ALLE RECHTEN
Je kunt zonder al te veel moeite een menu-optie maken om de Opdrachtprompt in een specifieke map te openen met administratorrechten door de inhoud van de sleutel ...\shell\cmd te kopiëren naar een nieuw te maken buursleutel ...\shell\RunAs. Alleen de (standaard)waarde van de sleutel moet je wijzigen in iets zinvols, zoals ‘Opdrachtprompt hier openen (administrator)’, 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 sleutelnaam RunAs.
Als je liever met PowerShell werkt dan met Opdrachtprompt, 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 administratorrechten 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\PowerShellAsAdmin. Het voegt een commando toe om PowerShell uit te voeren en geeft bij de Opdrachtprompt-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 administratorbevoegdheden. Bovendien ontvangt hij via de ArgumentList van Start-Process de instructie om met Set-Location naar de geselecteerde map te gaan.
Dat laatste detail klinkt eenvoudig, maar blijkt erg gecompliceerd te zijn. De gewenste mapnaam kan spaties bevatten en moet daarom tussen aanhalingstekens 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 aanhalingstekens. Bovendien verwijderen die bewerkingen extra aanhalingstekens 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 afschrikwekkend 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ïnteresseerd bent. Alle wijzigingen worden aangebracht in de sleutel HKEY_CURRENT_USER en zouden dus veilig moeten zijn bij mogelijke toekomstige creatieve invallen van Microsoft met betrekking tot gebruikersrechten voor het register. Zelfs als Microsoft ooit alle ingangen voor Opdrachtpromp 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 aanpassingen. Het is een eenvoudig tekstbestand dat je makkelijk aan je wensen kunt aanpassen voordat je het importeert.