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.
Invoering
PowerShell is de krachtigste automatiseringstool die Microsoft te bieden heeft, en 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 om te gaan, de console en de geïntegreerde scriptingomgeving - 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 je ziet, heeft de ISE een gesplitste weergave, zodat je snel kunt scripten terwijl je 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.
Gebruik van het helpsysteem
In eerdere versies van PowerShell zijn helpbestanden opgenomen toen u Windows installeerde. Dit was voor het grootste deel een goede oplossing maar liet ons met een groot probleem. Toen het Help-team van PowerShell moest stoppen met werken aan de helpbestanden, waren de PowerShell-ontwikkelaars nog steeds 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 verpakking 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 dit doen door een PowerShell-console te openen en te starten:
Update Help
Gefeliciteerd met het uitvoeren van je eerste PowerShell-opdracht! De waarheid is dat de Update-Help-opdracht veel meer opties heeft dan 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 eenvoudig de naam van de opdracht waarvoor u hulp nodig hebt, door aan de parameter Naam van de opdracht Get-Help, bijvoorbeeld:
Get-Help -Name Update-Help
Je vraagt je waarschijnlijk af hoe je al die tekst toch kunt interpreteren, 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 mengen). 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 u wilde 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 haken rond een parameternaam en het type betekent dat het een optionele parameter is en de opdracht werkt prima zonder deze parameter.
- Vierkante haken rond de naam van de parameters betekent dat de parameters positionele parameter zijn.
- Het ding rechts van een parameter in de haakjes onder de hoek geeft het gegevenstype aan dat de parameter verwacht.
Terwijl u de syntaxis van het Help-bestand moet leren lezen, kunt u, als u ooit een parameter over een bepaalde parameter niet kent, het volgende doen: -Tot het einde van uw Help-opdracht op en scrolt u omlaag naar de parameter-sectie, waar het u een beetje meer over elke parameter zal vertellen 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 betrekking hebben op Windows Services:
Get-Help -Name * service *
Natuurlijk, al deze informatie is misschien niet handig, maar geloof me, neem de tijd en leer hoe je het helpsysteem kunt gebruiken. Het is altijd handig, zelfs voor gevorderde scripters die dit al jaren doen.
Veiligheid
Dit zou geen goede introductie zijn zonder de veiligheid te vermelden. De grootste zorg voor het PowerShell-team is dat PowerShell het nieuwste en beste aanvalspunt voor scriptkiddies wordt. Ze hebben enkele beveiligingsmaatregelen getroffen om ervoor te zorgen dat dit niet gebeurt, dus laten we ze eens bekijken.
De meest elementaire 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 kunt u geen scripts uit de shell uitvoeren door de naam van het script te typen, u moet het volledige pad naar het script opgeven. Dus als je een script op je C-schijf wilde uitvoeren, zou je moeten typen:
C: \ runme.ps1
Of als u al aan de basis van de C-schijf bent, kunt u het volgende gebruiken:
.\ runme.ps1
Ten slotte heeft PowerShell iets genaamd uitvoeringsbeleid, waardoor je niet langer alleen maar 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:
- Beperkt: 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 verschijnen voordat u de scripts van vertrouwde uitgevers uitvoert.
- RemoteSigned: Met deze instelling kunnen scripts worden uitgevoerd, maar moeten het script en de configuratiebestanden die zijn gedownload van internet een bijbehorende digitale handtekening hebben 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.
Om te 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 RemoteSigned-beleid het 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 zien je 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 een reactie achterlaten.