15Sep

Geek School: Skriva din första Full PowerShell Script

För några veckor sedan visade The Geek dig hur du kan använda kommandotolken för att hitta när datorn startades senast. I den senaste installationen av Geek School för PowerShell ska vi skriva ett återanvändbart PowerShell-kommando för att göra samma sak.

Var noga med att läsa tidigare artiklar i serien:

  • Lär dig att automatisera Windows med PowerShell
  • Lär dig använda Cmdlets i PowerShell
  • Lär dig hur du använder objekt i PowerShell
  • Lär dig formatering, filtrering och jämförelse i PowerShell
  • Lär dig använda RemotingPowerShell
  • Använda PowerShell för att få datorinformation
  • Arbeta med samlingar i PowerShell
  • Lär dig hur du använder jobb i PowerShell
  • Lär dig hur du förlänger PowerShell
  • Learning PowerShell Variabler, ingång och utgång

Skriva ditt första skript

Det första vi behöver göra är atthitta ett sätt att få tillgång till den information vi söker. Eftersom vi hanterar hanteringsinformation behöver vi noga titta på WMI, som verkligen har en klass som heter Win32_OperatingSystem, som låter dig se verbos information om operativsystemet, inklusive den sista gången den startade.

Så nu vi vet var vi kan hitta den information vi letar efter, öppna ISE och skriv följande.

Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |

Select-Object -Property CSName, LastBootUpTime

Obs! Jag var tvungen att dela min kod över två linjer så att den passar in i skärmdumpen, men skriv det fritt i en enda rad. Om du väljer att dela upp den över två linjer, se till att rörteckenet är sista teckenet på rad 1.

Klicka nu på den gröna "Run Script" -knappen eller tryck på F5-tangenten på tangentbordet för att testa koden.

WMI-tider kan vara lite kryptiska. Med det menar vi att om du tittar på egenskapen LastBootUpTime, säger den 2013-03-19 kl 18:26:21, men av någon anledning bestämde WMI-killarna att de skulle sammanfatta allt detta till en enda sträng. Lyckligtvis för oss behöver vi inte oroa oss för att man manuellt analyserar strängen, eftersom det finns ett enklare sätt att göra det, om än mer avancerat. Du måste ändra delen Select-Object i koden så att den ser ut så här:

Select-Object -Property CSName, @{ n = "Last Booted";

e ={ [Management. ManagementDateTimeConverter]: : ToDateTime( $ _. LastBootUpTime)}}

Vad vi gör här skapar en egen egenskap som heter "Last Booted" och specificerar att dess värde måste vara ett resultat av att kalla ToDateTime staticmetod på egenskapen LastBootUpTime för det aktuella pipelineobjektet. Din kod ska nu se ut så här.

Att köra koden nu kommer att ge en mycket läsbar sista starttid.

Nu när vi är nöjda med den grundläggande funktionaliteten i vårt manus måste vi spara det. För enkelhet, låt oss spara det som följande:

C: \ Get-LastBootTime.ps1

Växla nu till den nedre halvan av ISE och kör följande:

C: \ Get-LastBootTime.ps1

Great! Vårt skript fungerar som förväntat, men det finns fortfarande ett problem med vårt manus. Vi har kodade namnet på den dator som vi vill ha den sista starttiden för. Istället för hårdkodningsvärden borde vi hellre ge en parameter så att den som använder skriptet kan välja vilken dator de kör skriptet mot. För att göra det, gå till toppen av ditt skript och gör följande.

param(
[string] $ Datornamn
)

Ersätt sedan det hårdkodade localhost-värdet med $ ComputerName-variabeln. Skriptet ska nu se ut så här:

Spara ditt skript och gå sedan tillbaka till den nedersta halvan av ISE och se hjälpen för ditt skript.

hjälp C: \ Get-LastBootTime.ps1

Awesome, så nu kan vi ange namnet på den dator vi vill ha den sista starttiden för att använda vår nya ComputerName-parameter. Tyvärr finns det fortfarande ett fåtal saker fel. För det första är parametern ComputerName valfri och för det andra, det är den fulaste hjälp jag någonsin har sett, så låt oss fixa dessa problem snabbt. För att göra datornamnsparametern obligatorisk, ändra innehållet i param-blocket till följande.

[Parameter( Obligatorisk = $ true)] [String] $ Datornamn

För att skapa en bättre hjälpfil är den vanligaste metoden att använda kommentarsbaserad hjälp. Det betyder att vi bara lägger till en extra lång kommentar till toppen av ut manuset.

& ##
. SYNOPSIS
Visar när din dator startades senast.
. DESKRIPTION
Detta är en WMI wrapper-funktion för att få den tid som datorn senast startade.
. PARAMETER Datornamn
Namnet på datorn som du vill köra kommandot mot.
. EXAMPLE
Get-LastBootTime -ComputerName localhost
. LINK
www.howtogeek.com
# & gt;

När allt är klart, ska du sluta med ett skript som ser ut så här.

Låt oss nu gå och kolla in vår nya hjälpfil.

Ahhh ser bra ut! Nu när vårt skript är färdigt har vi en sista sak att göra: testning. För detta kommer jag att gå ut ur ISE och gå tillbaka till PowerShell-konsolen så att vi kan se till att det inte finns några anomalier.

Om du börjar med en enkel liner och bara fortsätter bygga på den som vi gjorde i den här guiden kommer du att hänga på det på nolltid. Det är allt för den här gången, vi ses i nästa installation av Geek School.