Go pro: de krachtige gebruikershandleiding voor PowerShell

Als je met Windows 10 hebt geworsteld, heb je ongetwijfeld gehoord van PowerShell. Als je onlangs iets speciaals hebt geprobeerd met Win7 / 8.1, komt PowerShell waarschijnlijk ook naar voren. Na jarenlang te hebben vertrouwd op de Windows-opdrachtregel en door elkaar gegooide batchbestanden, is het tijd om uw zinnen te zetten op iets krachtigers, adapters - beter.

PowerShell is een enorme toevoeging aan de Windows-toolbox en kan gezien die enorme omvang een beetje angst opwekken. Is het een scripttaal, een commandoshell, een vloerwas? Moet u een cmdlet koppelen aan een geïnstantieerde .Net-klasse om met providers te worden uitgevoerd? En waarom hebben alle ondersteuningsdocumenten het over beheerders - moet ik een professionele Windows-beheerder zijn om er gebruik van te maken?

Kom tot rust. PowerShell is krachtig, maar het hoeft niet intimiderend te zijn.

De volgende gids is bedoeld voor degenen die een of twee Windows-opdrachten hebben uitgevoerd of een batchbestand hebben gejimmerd. Beschouw het als een stapsgewijze transformatie van PowerShell, nieuwsgierig naar PowerShell-capabel.

Stap 1: draai het aan

Het eerste dat u nodig heeft, is PowerShell zelf. Als u Windows 10 gebruikt, heeft u PowerShell 5, de nieuwste versie, al geïnstalleerd. (Win10 Jubileumupdate heeft 5.1, maar u zult het verschil niet weten met de Fall Update 5.0.) Windows 8 en 8.1 worden geleverd met PowerShell 4, wat goed genoeg is om natte voeten te krijgen. Het installeren van PowerShell op Windows 7 is niet moeilijk, maar het vergt extra zorg en u moet .Net Framework afzonderlijk installeren. JuanPablo Jofre beschrijft hoe u WMF 5.0 (Windows Management Framework), inclusief PowerShell, installeert, naast tools die u waarschijnlijk niet zult gebruiken wanneer u begint, op MSDN.

PowerShell biedt twee interfaces. Gevorderde gebruikers zullen kiezen voor de volledige GUI, bekend als de Integrated Scripting Environment (ISE). Beginners worden echter het best bediend door de PowerShell Console, een eenvoudige tekstinterface die doet denken aan de Windows-opdrachtregel, of zelfs DOS 3.2.

Om PowerShell als beheerder te starten vanuit Windows 10, klikt u op Start en scrolt u door de lijst met apps naar Windows PowerShell. Klik op die regel, klik met de rechtermuisknop op Windows PowerShell en kies Als administrator uitvoeren. Zoek in Windows 8.1 naar Windows PowerShell in de map Windows System. In Win7 staat het in de map Accessoires. U kunt PowerShell als een "normale" gebruiker uitvoeren door dezelfde reeks te volgen, maar met een linkermuisknop.

In elke versie van Windows kunt u Windows Search gebruiken om naar PowerShell te zoeken. In Windows 8.1 en Windows 10 kunt u het op uw Ctrl-X “Power-menu” plaatsen (klik met de rechtermuisknop op een lege plek op de taakbalk en kies Eigenschappen; op het tabblad Navigatie vinkt u het vakje aan om opdrachtprompt te vervangen). Als u het eenmaal hebt geopend, is het een goed idee om PowerShell op uw taakbalk vast te zetten. Ja, je zult het zo leuk vinden.

Stap 2: Typ ouderwetse Windows-opdrachten

U zou versteld staan ​​hoeveel de opdrachtregelsyntaxis van Windows werkt zoals verwacht in PowerShell.

Wijzigt bijvoorbeeld cdmappen (ook wel mappen genoemd) en dirgeeft nog steeds alle bestanden en mappen weer die in de huidige map zijn opgenomen.

Afhankelijk van hoe u de PowerShell-console start, kunt u beginnen bij c:\Windows\system32of op c:\Users\. In het screenshot-voorbeeld gebruik ik cd ..(let op de spatie) om één niveau tegelijk omhoog te gaan en vervolgens ren ik dirom alle bestanden en submappen in de C:\directory weer te geven.

Stap 3: Installeer de helpbestanden

Commando's zoals cden dirzijn geen native PowerShell-commando's. Het zijn aliassen - vervangt echte PowerShell-opdrachten. Aliassen kunnen handig zijn voor degenen onder ons met vingergeheugen dat moeilijk te overwinnen is. Maar ze beginnen niet eens de belangrijkste delen van PowerShell aan te raken.

Om een ​​idee te krijgen van PowerShell zelf, typ je helpgevolgd door een commando dat je kent. In de schermafbeelding typ ik bijvoorbeeld help dir.

PowerShell-hulp vertelt me ​​dat dirdit een alias is voor de PowerShell-opdracht Get-ChildItem. En ja hoor, als je get-childitembij de PS C:\>prompt typt , zie je precies wat je zag met het dircommando.

Zoals vermeld onder aan de schermafbeelding, worden helpbestanden voor PowerShell niet automatisch geïnstalleerd. Om ze op te halen (je hoeft ze wilt krijgen), inloggen op PowerShell in Administrator mode, typ update-help. Het installeren van de helpbestanden duurt enkele minuten, en het kan zijn dat u enkele modules mist. Help voor NetWNV en SecureBoot kan niet worden geïnstalleerd op mijn testmachine. Maar als u klaar bent, staat het volledige helpsysteem voor u klaar.

Typ vanaf dat moment get-helpgevolgd door het commando ("cmdlet" in PowerShell speak, uitgesproken als "command-let") die u aanbelangt en bekijk alle hulp voor dat item. get-help get-childitemProduceert bijvoorbeeld een overzicht van de get-childitemmogelijkheden. Het vraagt ​​u ook om variaties op het thema in te typen. Dus het volgende:

get-help get-childitem -examples

geeft zeven gedetailleerde voorbeelden van het gebruik get-childitem. De PowerShell-opdracht

get-help get-childitem -detailed

bevat deze zeven voorbeelden, evenals een gedetailleerde uitleg van elke parameter die beschikbaar is voor de get-childitemcmdlet.

Stap 4: Hulp bij de parameters

In de help dirscreenshot, heb je misschien gemerkt dat er twee vermeldingen onder SYNTAXvoor get-childitem. Het feit dat er twee afzonderlijke syntaxis voor de cmdlet zijn, betekent dat er twee manieren zijn om de cmdlet uit te voeren. Hoe houd je de syntaxis gescheiden - en wat betekenen de parameters? Het antwoord is eenvoudig, als je de truc kent.

get-childitemGebruik de -fullparameter als volgt om alle details over parameters voor de cmdlet of een andere cmdlet op te halen:

get-help get-childitem -full

Dat levert een regel voor regel op van wat u kunt doen met de cmdlet en wat er wel of niet kan gebeuren. Zie screenshot.

Als u de parameterdetails doorzoekt, is het redelijk eenvoudig om te zien dat ze get-childitemkunnen worden gebruikt om "onderliggende" items (zoals de namen van submappen of bestandsnamen) op te halen op een locatie die u opgeeft, met of zonder specifieke tekenovereenkomsten. Bijvoorbeeld:

get-childItem “*.txt” -recurse

haalt een lijst op van alle " *.txt" bestanden in de huidige map en alle submappen (vanwege de -recurseparameter). Overwegende dat het volgende:

get-childitem “HKLM:\Software”

geeft een lijst terug met alle registersleutels op hoog niveau in HKEY_LOCAL_MACHINE\Software.

Als je ooit hebt geprobeerd om in het register te komen met een Windows-opdrachtregel of een batchbestand, weet ik zeker dat je kunt zien hoe krachtig dit soort toegang moet zijn.

Stap 5: Spijker de namen op

Er is een reden waarom de cmdlets die we hebben gezien tot nu toe hetzelfde uitzien: get-childitem, update-help, en get-helpvolgen allemaal hetzelfde werkwoord-naamwoord conventie. Gelukkig gebruiken alle cmdlets van PowerShell deze conventie, met een werkwoord dat voorafgaat aan een (enkelvoud) zelfstandig naamwoord. Degenen onder jullie die wekenlang hebben geworsteld over inconsistent genoemde VB- en VBA-commando's, kunnen opgelucht ademhalen.

Bekijk enkele van de meest voorkomende cmdlets om te zien waar we heen gaan (met dank aan Ed Wilson's Hey, Scripting Guy! Blog). Begin met de cmdlets die uw systeem bereiken en haal er nuttige informatie uit, zoals de volgende:

  • set-location: Stelt de huidige werklocatie in op een opgegeven locatie
  • get-content: Haalt de inhoud van een bestand op
  • get-item: Haalt bestanden en mappen op
  • copy-item: Kopieert een item van de ene locatie naar de andere
  • remove-item: Verwijdert bestanden en mappen
  • get-process: Haalt de processen op die worden uitgevoerd op een lokale of externe computer
  • get-service: Zorgt ervoor dat de services worden uitgevoerd op een lokale of externe computer
  • invoke-webrequest: Haalt inhoud op van een webpagina op internet

Als u wilt zien hoe een bepaalde cmdlet werkt, gebruikt u get-help, zoals in

get-help copy-item -full

Op basis van de Help-beschrijving kunt u gemakkelijk achterhalen wat de cmdlet wil. Als u bijvoorbeeld al uw bestanden en mappen van Documentsnaar wilt kopiëren c:\temp, gebruikt u:

copy-item c:\users\[username] \documents\* c:\temp

Terwijl u die opdracht invoert, ziet u een paar leuke details ingebouwd in de PowerShell-omgeving. Als u bijvoorbeeld typt copy-ien op de Tab-toets drukt, vult PowerShell Copy-Itemen een spatie in. Als u een cmdlet verkeerd typt en PowerShell er niet achter komt, krijgt u een zeer grondige beschrijving van wat er mis is gegaan.

Probeer deze cmdlet. (Het kan proberen u zover te krijgen dat u een programma installeert om het vak "over" te lezen. Als dit het geval is, negeert u het.)

invoke-webrequest askwoody.com

U krijgt een beknopte lijst met de inhoudverklaringen, kopteksten, afbeeldingen, links en meer van de webpagina. Zie je hoe dat werkt? Merk in de get-helplijst daarvoor op invoke-webrequestdat de invoke-webrequestcmdlet "verzamelingen formulieren, koppelingen, afbeeldingen en andere belangrijke HTML-elementen retourneert" - precies wat u op uw scherm zou moeten zien.

Sommige cmdlets helpen u PowerShell zelf te besturen of te groken:

  • get-command: Toont alle beschikbare cmdlets (het is een lange lijst!)
  • get-verb: Toont alle beschikbare werkwoorden (de linkerhelften van cmdlets)
  • clear-host: Wist de weergave in het hostprogramma

Met verschillende parameters (onthoud, get-help) kunt u de opdrachten verkleinen en de opties beperken die voor u van nut kunnen zijn. Probeer bijvoorbeeld dit om een ​​lijst te zien van alle cmdlets die werken met Windows-services:

get-command *-service

Het bevat alle werkwoorden die beschikbaar zijn met serviceals zelfstandig naamwoord. Hier is het resultaat:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

U kunt deze cmdlets combineren met andere cmdlets om in bijna elk deel van PowerShell te graven. Dat is waar pijpen in beeld komen.

Stap 6: Breng de leidingen binnen

Als je ooit de Windows-opdrachtregel hebt gebruikt of door een batchbestand hebt geploet, weet je van omleiding en leidingen. In eenvoudige bewoordingen nemen zowel redirection (het  >teken) als pipes (het |teken) de uitvoer van een actie en plakken deze ergens anders. U kunt bijvoorbeeld de uitvoer van een dircommando omleiden naar een tekstbestand, of het resultaat van een pingcommando naar een "pipen" findom interessante resultaten eruit te filteren, zoals:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

In het tweede commando hierboven findzoekt het commando naar de string packetsin de doorgesluisde uitvoer van een askwoody.com pingen plakt alle regels die overeenkomen in een bestand met de naam temp2.txt.

Misschien verrassend, werkt de eerste van die opdrachten prima in PowerShell. Om het tweede commando uit te voeren, wil je zoiets als dit:

ping askwoody.com | select-string packets | out-file temp2.txt

Door omleiding en pijpen te gebruiken, worden de mogelijkheden van de Windows-opdrachtregel aanzienlijk uitgebreid: in plaats van eindeloos door een scherm te scrollen op zoek naar een tekstreeks, kunt u bijvoorbeeld een doorgesluisde Windows-opdracht samenstellen die de controle voor u doet.

PowerShell heeft een piping-mogelijkheid, maar is niet beperkt tot tekst. In plaats daarvan kunt u met PowerShell een volledig object van de ene cmdlet naar de volgende doorgeven, waarbij een "object" een combinatie is van gegevens (eigenschappen genaamd) en de acties (methoden) die voor de gegevens kunnen worden gebruikt.

Het moeilijke deel ligt echter in het uitlijnen van de objecten. Het soort object dat door één cmdlet wordt afgeleverd, moet overeenkomen met de soorten objecten die door de ontvangende cmdlet worden geaccepteerd. Tekst is een heel eenvoudig soort object, dus als u met tekst werkt, is het opstellen van items eenvoudig. Andere objecten zijn niet zo rudimentair.

Hoe kom je erachter? Welkom bij de get-membercmdlet. Als je wilt weten welk type object een cmdlet produceert, leid het dan door get-member. Als u bijvoorbeeld probeert te achterhalen welke processen op uw computer worden uitgevoerd en u de opties hebt beperkt tot de get-processcmdlet, kunt u als volgt achterhalen wat de get-processcmdlet produceert:

get-process | get-member

Het uitvoeren van die opdracht levert een lange lijst met eigenschappen en methoden op get-process, maar helemaal aan het begin van de lijst ziet u het type object dat het volgende get-process creëert:

TypeName: System.Diagnostics.Process

De screenshot hieronder vertelt je ook dat de get-processeigenschappen genoemd heeft Handles, Name, NPM, PM, SI, VM, en WS.

Als u de uitvoer van wilt manipuleren get-processzodat u ermee kunt werken (in plaats van dat het een lange lijst met actieve processen op de monitor weergeeft), moet u een andere cmdlet vinden waarmee u System.Diagnostics.Processals invoer kunt werken. Om een ​​gewillige cmdlet te vinden, gebruik je gewoon ... wacht erop ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

Dat levert een lijst op van alle cmdlets die kunnen worden verwerkt System.Diagnostics.Process.

Sommige cmdlets zijn berucht omdat ze bijna elke vorm van invoer opnemen. Chief onder hen: where-object. Misschien verwarrend, where-objectdoorloopt elk item dat door de pijplijn wordt verzonden, één voor één, en past de selectiecriteria toe die u aanvraagt. Er wordt een speciale marker genoemd $_. waarmee u elk item in de buis een voor een kunt doorlopen.

Stel dat u een lijst wilt maken van alle processen die op uw computer worden uitgevoerd en die " svchost" worden genoemd. In PowerShell spreekt u een overeenkomst met een Nameeigenschap van  svchost. Probeer deze PowerShell-opdracht:

get-process | where-object {$_.Name -eq “svchost”}

De where-objectcmdlet kijkt naar elk System.Diagnostics.Processitem, vergelijkt het .Namevan dat item met " svchost"; als het item overeenkomt, wordt het uit het uiteinde van de buis gespuugd en op uw monitor getypt. Zie screenshot.