15Jul

Geek School: Lär dig att automatisera Windows med PowerShell

I den här utgåvan av Geek School hjälper vi dig att förstå det kraftfulla PowerShell-skriptspråket som är byggt direkt i Windows, och är mycket användbart att veta i en IT-miljö.

Även om denna serie inte är strukturerad runt en tentamen, är lärande PowerShell en av de viktigaste sakerna du kan göra som nätverksadministratör, så om det finns en sak du vill lära dig att hjälpa din IT-karriär, så är det här. Dessutom är det mycket roligt.

Inledning

PowerShell är det mest kraftfulla automatiseringsverktyget som Microsoft har att erbjuda, och det är både ett skal och ett skriptspråk.

Observera att denna serie är baserad på PowerShell 3, som skickas med Windows 8 och Server 2012. Om du kör Windows 7, ladda ner PowerShell 3-uppdateringen innan du fortsätter.

Möt konsolen och ISE

Det finns två sätt att interagera med PowerShell ur lådan, konsolen och den integrerade skriptmiljön - även känd som ISE.ISE har förbättrats avsevärt från den hemska versionen som levereras med PowerShell 2 och kan öppnas genom att trycka på Win + R-tangentbordskombinationen för att få fram en körbox och sedan skriva in powershell_ise och trycka på enter.

Som du kan se ISE-sporten en delad vy så att du snabbt kan skript medan du fortfarande kan se resultatet i den lägre halvan av ISE.Den nedersta halvan av ISE, där resultaten av ditt skript skrivs ut, kan också användas som en REPL-prompt - ungefär som kommandotolken. V3 ISE lade slutligen till stöd för intellisens både i manusrutan och i den interaktiva konsolen.

Alternativt kan du interagera med PowerShell med PowerShell Console, vilket jag brukar använda för den mesta av denna serie. PowerShell Console beter sig som kommandotolken - du anger helt enkelt kommandon och spetsar resultaten. För att öppna Windows PowerShell Console trycker du på Win + R tangentbordskombinationen för att öppna en körruta och skriv powerhell och tryck sedan på enter.

REPL prompts så här är fantastisk för omedelbar tillfredsställelse: du skriver in ett kommando och du får resultat. Medan konsolen inte erbjuder intellisense, erbjuder den något som kallas flikavslutning som fungerar mycket lika - helt enkelt börja skriva ett kommando och tryck på fliken för att gå igenom möjliga matchningar.

Använda hjälpsystemet

I tidigare versioner av PowerShell inkluderades hjälpfiler när du installerade Windows. Detta var en bra lösning för det mesta men lämnade oss med ett stort problem. När PowerShells hjälpteam var tvungen att sluta arbeta med hjälpfilerna var PowerShell-utvecklarna fortfarande upptagna i kodning och ändringar. Detta innebar att när PowerShell skickades var hjälpfilerna felaktiga eftersom de inte innehöll de nyare ändringarna som gjordes i koden. För att lösa detta problem levereras PowerShell 3 utan hjälpfiler i rutan och innehåller ett uppdaterbart hjälpsystem. Det betyder att innan du gör något du vill ladda ner de senaste hjälpfilerna. Du kan göra det genom att öppna en PowerShell Console och köra:

Update-Help

Grattis till att du kör ditt första PowerShell-kommando! Sanningen är att kommandot Update-Help har många fler alternativ än att bara köra det, och för att se dem vill vi se hjälpen för kommandot. För att se hjälpen för ett kommando, skickar du helt enkelt namnet på det kommando du vill ha hjälp med till parametern Namn i Get-Help-kommandot, till exempel:

Get-Help -Name Uppdatering-Hjälp

Du undrar nog hur du tolkarall den texten ändå, menar jag varför finns det två mycket information under syntaxavsnittet och varför finns det så många konsoler överallt? Första saker först: anledningen till att det finns två informationsblock under syntaxavsnittet är att de representerar olika sätt att köra kommandot. Dessa kallas tekniskt parametersatser och du kan bara använda en åt gången( du kan inte blanda parametrar från olika uppsättningar).I ovanstående skärmdump kan du se att toppparametersatsen har en SourcePath-parameter medan botten inte gör det. Anledningen till att du skulle använda toppparametersatsen( den som innehåller SourcePath) om du uppdaterade dina hjälpfiler från en annan maskin i ditt nätverk som redan har laddat ner dem, medan du inte behöver ange en källväg om duville bara ta de senaste filerna från Microsoft.

För att svara på den andra frågan finns det en viss syntax som hjälper till att följa och här är det:

  • Square parentes runt ett parameternamn och dess typ betyder att det är en valfri parameter och kommandot fungerar bra utan det.
  • Fäste runt parameterns namn betyder att parametrarna är positionsparametrar.
  • Saken till höger om en parameter i de vinklade fästena berättar vilken datatyp parametern förväntar sig.

Medan du borde lära dig att läsa hjälpfilsyntaxen, om du någonsin är osäker på en viss parameter, lägger du bara till - Fyll i slutet av ditt kommando med hjälp och rulla ner till parameterns avsnitt, där det kommer att berätta lite mer omvarje parameter.

Get-Help -Name Update-Help-Full

Det sista du behöver veta om hjälpsystemet är hur du kan använda den för att upptäcka kommandon, vilket är mycket enkelt. Du förstår, PowerShell accepterar jokertecken nästan var som helst, så att använda dem tillsammans med kommandot Get-Help gör att du enkelt kan upptäcka kommandon. Till exempel letar jag efter kommandon som handlar om Windows Services:

Get-Help-Name * service *

Visst, all denna information kanske inte är användbar av fladdermusen, men lita på mig, ta dig tid och lär dig hur du använderhjälpsystemet. Det kommer till hands hela tiden, även till avancerade scripters som har gjort det här i flera år.

Security

Detta skulle inte vara en korrekt introduktion utan att nämna säkerhet. Den största oro för PowerShell-teamet är att PowerShell blir den senaste och största attackpunkten för manuskriptkiddier. De har infört några säkerhetsåtgärder för att se till att det inte händer, så låt oss ta en titt på dem.

Den mest grundläggande formen av skydd härrör från att PS1-filtillägget( förlängningen som används för att beteckna ett PowerShell-skript) inte är registrerat hos en PowerShell-värd, det är faktiskt registrerat med anteckningsblock. Det betyder att om du dubbelklickar på en fil öppnas den med anteckningsblock istället för att springa.

För det andra kan du inte köra skript från skalet genom att bara skriva skriptets namn, du måste ange hela sökvägen till skriptet. Så om du vill köra ett skript på din C-enhet skulle du behöva skriva:

C: \ runme.ps1

Eller om du redan är i kärnan på C-enheten kan du använda följande:

. \ Runme.ps1

Slutligen har PowerShell något som heter Exekveringspolicy, vilket hindrar dig från att bara köra ett gammalt manus. I själva verket kan du som standard inte köra några skript och behöver ändra din exekveringspolicy om du vill få köra dem. Det finns 4 anmärkningsvärda genomförandebestämmelser:

  • Begränsad : Detta är standardkonfigurationen i PowerShell. Den här inställningen innebär att inget skript kan köras, oavsett signatur. Det enda som kan köras i PowerShell med denna inställning är ett enskilt kommando.
  • AllSigned: Den här inställningen tillåter att skript körs i PowerShell. Skriptet måste ha en tillhörande digital signatur från en betrodd utgivare. Det kommer att bli en snabb innan du kör skript från betrodda utgivare.
  • RemoteSigned : Den här inställningen tillåter att skript körs, men kräver att skript och konfigurationsfiler som laddas ned från Internet har en tillhörande digital signatur från en betrodd utgivare. Skript som körs från den lokala datorn behöver inte signeras. Det finns inga anvisningar innan du kör skriptet.
  • Obegränsat : Detta tillåter att oskickade skript körs, inklusive alla skript och konfigurationsfiler som laddas ned från Internet. Detta kommer att innehålla filer från Outlook och Messenger. Risken här kör skript utan signatur eller säkerhet. Vi recommenced att du aldrig oss denna inställning.

För att se vad din nuvarande Exekveringspolicy är inställd på, öppna en PowerShell Console och skriv:

Get-ExecutionPolicy

För den här kursen och de flesta andra omständigheter är RemoteSigned Policy det bästa, så fortsätt och ändra din policy med följande.

Obs! Det här måste göras från en förhöjd PowerShell Console.

Set-ExecutionPolicy RemoteSigned

Det är allt för den här tiden folk, vi ses imorgon för lite mer PowerShell-kul.

Ansvarsbegränsning: Den korrekta termen för ett PowerShell-kommando är en cmdlet, och från och med nu kommer vi att använda den här rätt terminologin. Det kände sig bara lämpligare att kalla dem kommandon för denna introduktion.

Om du har några frågor kan du tweeta mig @taybgibb, eller bara lämna en kommentar.