15Jul

Geek School: leer hoe je Windows kunt automatiseren met PowerShell

In deze editie van Geek School helpen we u de krachtige PowerShell-scripttaal te begrijpen die is ingebouwd in Windows, en die uiterst nuttig is om te weten in een IT-omgeving.

Hoewel deze serie niet rond een examen is gestructureerd, is het leren van PowerShell een van de belangrijkste dingen die je als netwerkbeheerder kunt doen, dus als er iets is dat je wilt leren om je IT-carrière te helpen, dan is dit het. Bovendien is het heel leuk.

Inleiding

PowerShell is de krachtigste automatiseringstool die Microsoft te bieden heeft, en het is zowel een shell- als een scriptingtaal.

Houd er rekening mee dat deze serie is gebaseerd op PowerShell 3, die wordt geleverd met Windows 8 en Server 2012. Als u Windows 7 gebruikt, downloadt u de PowerShell 3-update voordat u doorgaat.

Maak kennis met de console en de ISE

Er zijn twee manieren om direct met PowerShell te werken, de console en de geïntegreerde scriptomgeving - ook bekend als de ISE.De ISE is enorm verbeterd ten opzichte van de afgrijselijke versie die werd meegeleverd met PowerShell 2 en kan worden geopend door op de Win + R-toetsenbordcombinatie te drukken om een ​​uitvoeringsvak te openen, vervolgens powershell_ise te typen en op enter te drukken.

Zoals u kunt zien, heeft de ISE een gesplitste weergave, zodat u snel kunt scripten terwijl u nog steeds het resultaat in de onderste helft van de ISE kunt zien. De onderste helft van de ISE, waar de resultaten van uw script worden afgedrukt, kan ook worden gebruikt als een REPL-prompt - net als de opdrachtprompt. De v3 ISE heeft eindelijk ondersteuning voor intellisense toegevoegd in zowel het scriptvenster als de interactieve console.

Als alternatief kunt u communiceren met PowerShell met behulp van de PowerShell-console, wat ik zal gebruiken voor het grootste deel van deze serie. De PowerShell-console gedraagt ​​zich net als de opdrachtprompt: u voert eenvoudig opdrachten in en spuugt de resultaten weg. Om de Windows PowerShell-console te openen, drukt u nogmaals op de combinatie Win + R-toetsenbord om een ​​uitvoeringsvak te openen en typt u Powershell en drukt u vervolgens op Enter.

REPL-prompts zoals deze zijn geweldig voor directe bevrediging: u voert een opdracht in en u krijgt resultaten. Hoewel de console geen intellisense biedt, biedt deze wel een functie genaamd 'tab completion' die vrijwel hetzelfde functioneert - begin gewoon een commando te typen en druk op tab om door mogelijke matches te bladeren.

Het Help-systeem gebruiken

In oudere versies van PowerShell zijn helpbestanden opgenomen toen u Windows installeerde. Dit was voor het grootste deel een goede oplossing maar liet ons met een aanzienlijk probleem. Toen het Help-team van PowerShell moest stoppen met werken aan de helpbestanden, waren de PowerShell-ontwikkelaars nog bezig met het coderen en wijzigen. Dit betekende dat wanneer PowerShell werd verzonden, de helpbestanden onjuist waren omdat ze niet de nieuwere wijzigingen bevatten die in de code waren aangebracht. Om dit probleem op te lossen, bevat PowerShell 3 geen helpbestanden uit de doos en is er een helpsysteem dat kan worden bijgewerkt. Dit betekent dat voordat u iets gaat doen, u de nieuwste Help-bestanden wilt downloaden. U kunt dat doen door een PowerShell-console te openen en te starten:

Update-Help

Gefeliciteerd met het uitvoeren van uw eerste PowerShell-opdracht! De waarheid is dat de Update-Help-opdracht veel meer opties heeft dan gewoon gewoon uitvoeren, en om ze te bekijken, willen we de hulp voor de opdracht bekijken. Als u de Help voor een opdracht wilt weergeven, geeft u de naam van de opdracht waarvoor u hulp nodig hebt gewoon door aan de parameter Name van de opdracht Get-Help, bijvoorbeeld:

Get-Help -Name Update-Help

U vraagt ​​zich waarschijnlijk af hoe u moet interpreterenal die tekst sowieso, ik bedoel, waarom zijn er twee veel informatie onder de syntaxisectie en waarom zijn er zoveel haakjes overal? Allereerst: de reden dat er twee blokken met informatie onder de syntaxisectie zijn, is omdat ze verschillende manieren vertegenwoordigen om de opdracht uit te voeren. Dit zijn technisch gesproken parametersets en u kunt er maar één tegelijk gebruiken( u kunt parameters van verschillende sets niet combineren).In de bovenstaande schermafbeelding ziet u dat de bovenste parameterset een SourcePath-parameter heeft, terwijl de onderste niet. De reden hiervoor is dat u de bovenste parameterset( degene die SourcePath bevat) zou gebruiken als u uw helpbestanden bijwerkt vanaf een andere machine in uw netwerk die ze al had gedownload, terwijl u geen bronpad hoeft te specificeren als uwilde gewoon de nieuwste bestanden van Microsoft pakken.

Om de tweede vraag te beantwoorden, is er een bepaalde syntaxis die helpt bij het volgen van bestanden en hier is het:

  • Vierkante haakjes rond een parameternaam en het type betekent dat het een optionele parameter is en het commando werkt prima zonder dit.
  • Vierkante haakjes rond de naam van de parameters betekent dat de parameters de positionele parameter zijn.
  • Het ding aan de rechterkant van een parameter in de haakjes onder de hoek geeft het gegevenstype aan dat de parameter verwacht.

Hoewel je moet leren om de syntax van het helpbestand te lezen, als je je ooit eens over een bepaalde parameter waagt, voeg dan gewoon toe: - helemaal aan het einde van je hulp-opdracht en scroll naar beneden naar de parameter-sectie, waar het je wat meer zal vertellen overelke parameter.

Get-Help -Name Update-Help -Full

Het laatste dat u moet weten over het helpsysteem is hoe u het kunt gebruiken om opdrachten te vinden, wat eigenlijk heel gemakkelijk is. U ziet dat de PowerShell vrijwel overal jokertekens accepteert, zodat u ze samen met de opdracht Get-Help kunt gebruiken om eenvoudig opdrachten te vinden. Ik ben bijvoorbeeld op zoek naar opdrachten die te maken hebben met Windows Services:

Get-Help-Name * -service *

Natuurlijk, al deze informatie is misschien niet handig, maar geloof me, neem de tijd en leer hoe te gebruikenhet helpsysteem. Het is altijd handig, zelfs voor gevorderde scripters die dit al jaren doen.

Beveiliging

Dit zou geen goede introductie zijn zonder de veiligheid te vermelden. De grootste zorg voor het PowerShell-team is dat PowerShell het nieuwste en grootste aanvalspunt voor scriptkiddies wordt. Ze hebben een paar beveiligingsmaatregelen getroffen om ervoor te zorgen dat dit niet gebeurt, dus laten we ze eens bekijken.

De eenvoudigste vorm van bescherming komt van het feit dat de PS1-bestandsextensie( de extensie die wordt gebruikt om een ​​PowerShell-script aan te duiden) niet is geregistreerd bij een PowerShell-host, maar feitelijk is geregistreerd bij Kladblok. Dat betekent dat als u dubbelklikt op een bestand, het wordt geopend met Kladblok in plaats van te worden uitgevoerd.

Ten tweede kun je geen scripts uitvoeren vanuit de shell door gewoon de naam van het script in te voeren, je moet het volledige pad naar het script specificeren. Dus als u een script op uw C-schijf wilde uitvoeren, typt u het volgende:

C: \ runme.ps1

Of als u al in de hoofdmap van de C-schijf zit, kunt u het volgende gebruiken:

. \ Runme.ps1

Ten slotte heeft PowerShell iets dat uitvoeringsbeleid wordt genoemd, waardoor je niet langer een oud script hoeft te draaien. In feite kunt u standaard geen scripts uitvoeren en moet u uw uitvoeringsbeleid wijzigen als u toestemming wilt krijgen om ze uit te voeren. Er zijn 4 opmerkelijke uitvoeringsbeleid:

  • Restricted : dit is de standaardconfiguratie in PowerShell. Deze instelling betekent dat er geen script kan worden uitgevoerd, ongeacht de handtekening. Het enige dat in PowerShell met deze instelling kan worden uitgevoerd, is een individuele opdracht.
  • AllSigned: Met deze instelling kunnen scripts in PowerShell worden uitgevoerd. Het script moet een bijbehorende digitale handtekening hebben van een vertrouwde uitgever. Er zal een prompt zijn voordat u de scripts van vertrouwde uitgevers uitvoert.
  • RemoteSigned : Met deze instelling kunnen scripts worden uitgevoerd, maar het script en de configuratiebestanden die van internet zijn gedownload, hebben een bijbehorende digitale handtekening van een vertrouwde uitgever. Scripts die van de lokale computer worden uitgevoerd, hoeven niet te worden ondertekend. Er zijn geen aanwijzingen voordat het script wordt uitgevoerd.
  • Onbeperkt : hiermee kunnen niet-ondertekende scripts worden uitgevoerd, inclusief alle scripts en configuratiebestanden die van internet zijn gedownload. Dit omvat bestanden van Outlook en Messenger. Het risico hier is het uitvoeren van scripts zonder enige handtekening of beveiliging. We hebben opnieuw aangegeven dat je ons nooit deze instelling hebt gegeven.

Als u wilt zien waarvoor uw huidige uitvoeringsbeleid is ingesteld, opent u een PowerShell-console en typt u:

Get-ExecutionPolicy

Voor deze cursus en de meeste andere omstandigheden is het beleid voor RemoteSigned de beste, dus ga je gang en wijzig je beleid met behulp van het volgende.

Opmerking: dit moet worden gedaan vanuit een verhoogde PowerShell-console.

Set-ExecutionPolicy RemoteSigned

Dat is alles voor deze tijd mensen, tot morgen voor nog meer PowerShell-plezier.

Disclaimer: de juiste term voor een PowerShell-opdracht is een cmdlet en vanaf nu zullen we deze correcte terminologie gebruiken. Het voelde gewoon beter om ze commando's voor deze introductie te noemen.

Als je vragen hebt, kun je me tweeten @taybgibb, of laat een reactie achter.