PowerShell, En resa för IT-proffs del 4 – Skapa verktyg

blog_powershell_series

PowerShell, En resa för IT-proffs del 4 – Skapa verktyg

Del 1 – Introduktion 
Del 2 – Powershell ISE
Del 3 – Objekt
Del 4 – Skapa verktyg

När man vill bygga något återanvändningsbart med PowerShell, gör man det lättast genom att börja med att skapa ett skript. Detta innehåller oftast en samling av kommandon som man utgör i logiska flöden, vad det innebär kommer vi att återkomma till.

För att komma igång, starta PowerShell ISE. I den vänstra övre kanten kommer du se att det är en fil öppnad som har namnet Untitled.ps1. För att spara denna och ge den ett mer beskrivande namn, gå till File menyn och välj att spara den som GetComputerInfo.ps1.

Tabben bör nu se ut enligt följande:

ru1

En bra sak att börja med när man vill skriva ett skript, är att att skriva ”pseudokod”. Vad detta innebär, är att man skriver i beskrivande ordalag vad man avser att göra. I PowerShell kan man med enkelhet ha detta med som kommentarer i ett skript. Sedan efter hand som man får till de saker man vill att skriptet ska utföra, tar man bort kommentarerna.

Låt oss börja! Vi vill i denna serie bygga något som inventerar datorer och samlar in data ifrån en eller flera maskiner där man sedan kan presenterar detta för oss i ett enkelt läsbart underlag.

Vi börjar med att man ska kunna ta in information till skriptet (i form av datornamn) när man kör det, detta blir vår lista på maskiner vi vill inventera, lägg till följande text till skripfilen:

ru2

Vi fortsätter med att lägga in mer information av saker vi vill att skriptet ska utföra…

ru3

För att kunna ta in en lista på datorer vi vill göra saker emot, måste vi i vårt skript ha en parameter som man kan använda. I PowerShell behöver man skapa en egen sektion för att uppnå detta, så vi skapar ett element som heter ”Param” med parenteser efter. Inom dessa, skapar vi en minnesplats som användare kan skicka in en lista av datorer till, vi döper den till$ComputerName. Det bör se ut enligt följande:

ru4

I nästa del av skriptet, vill vi kunna kontrollera om det är en eller flera datorer vi kommer att göra saker med. För att kunna bryta ut informationen ifrån vår lista av datorer ($ComputerName) måste vi göra en funktion som utförs ”för varje dator”, det kallar för en ForEach loop logiskt nog, och är en del av det logiska flödet vi nämnde i början av posten. Denna beskrivs enligt ”för varje dator i listan av datorer”, där vi väljer att skriva ut vad datorn är som $C, det blir enligt följande:

ru5

I ovan väljer vi att skriva ut ifrån skriptet vad $C är, man kan testa skriptet redan nu. Välj att spara filen och starta en ny PowerShell konsol, navigera sedan till filen och testa kör den, enligt bilden nedan:

ru6

Som ni ser går det nu att använda parametern, enligt –ComputerName ovan, när man kör denna med att skicka in ”test”, ser man att man får ut resultatet i raden under. Man kan själv lägga till flera datorer till parametern, man separerar dem bara genom att använda ett kommatecken.

Ok, nu vet vi att vi kan skicka in datorer till vårt skript. Nu vill vi testa om det går att ansluta till dem eller ej, för att testa detta använder vi kommandot Test-NetConnection. Detta kan använda växlarna ComputerName samt CommonTCPPortvilket kommer att hjälpa oss.

Utöka skriptet med nedan text:

ru7

Det vi gör i ovan block är att testa en anslutning mot dator $C med standard porten för PowerShell (WinRM), vi sätter ev. felmeddelande vi kan få med att ansluta till en dator som inte finns, till att tyst gå vidare (-ErrorAction SilentlyContinue). Därefter kontrollerar vi om anslutningen var lyckad via att testa anslutningens statusegenskap via uttrycket If (om anslutningens egenskap är framgångsrik). Om så är fallet väljer vi att skriva ut det till konsolen via Write-Output. Spara skriptet och testa det igen, för att säkerställa att du kan ansluta till en dator, testa mot dig själv via att sätta parameternComputerName till ”localhost” eller ”127.0.0.1”.

Vi kan nu ändra kommentarerna i skriptet och plocka bort det som vi redan åstadkommit, nämligen få in datorer som parameter samt testa anslutning mot. Skriptet bör se ut enligt nedan nu:

ru8

I nästa post kommer vi ta upp hur man skapar en anslutning mot fjärrdatorer och kör frågor kopplat till vår inventering vi vill göra.

Richard Ulfvin
Chief Technology Officer at Addlevel and expert in automation, development and advanced implementation projects.richard.ulfvin@addlevel.se

Post Comment