15Sep

Geek School: het schrijven van je eerste volledige PowerShell-script

Een paar weken geleden liet The Geek je zien hoe je de opdrachtprompt kunt gebruiken om te achterhalen wanneer je computer voor het laatst werd opgestart. In deze laatste installatie van Geek School voor PowerShell gaan we een herbruikbare PowerShell-opdracht schrijven om hetzelfde te doen.

Lees de vorige artikelen in de reeks:

  • Leer hoe u Windows kunt automatiseren met PowerShell
  • Leren gebruik van cmdlets in PowerShell
  • Leren hoe u objecten in PowerShell kunt gebruiken
  • Leren opmaken, filteren en vergelijken in PowerShell
  • Leer hoe u remodeling in moet stellenPowerShell
  • PowerShell gebruiken om computerinformatie te verkrijgen
  • Werken met collecties in PowerShell
  • Meer informatie over het gebruik van opdrachten in PowerShell
  • Meer informatie over hoe u PowerShell
  • kunt uitbreiden Leren PowerShell-variabelen, invoer en uitvoer

Uw eerste script schrijven

Het eerste wat we moeten doen, iseen manier vinden om toegang te krijgen tot de informatie waarnaar we op zoek zijn. Aangezien we te maken hebben met managementinformatie, moeten we waarschijnlijk een kijkje nemen bij het gebruik van WMI, dat inderdaad een klasse heeft genaamd Win32_OperatingSystem waarmee je uitgebreide informatie over je besturingssysteem kunt bekijken, inclusief de laatste keer dat het werd opgestart.

Dus nu we weten waar we de informatie kunnen vinden waarnaar we op zoek zijn, open dan de ISE en typ het volgende.

Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |

Select-Object -eigenschap CSName, LastBootUpTime

Opmerking: ik moest mijn code over twee regels splitsen zodat het allemaal in de screenshot paste, maar voel je vrij om het op een enkele regel te typen. Als je ervoor kiest om het over twee regels te splitsen, zorg er dan voor dat het pipe-teken het laatste teken op regel 1 is.

Klik nu op de groene knop "Script uitvoeren" of druk op de F5-toets op je toetsenbord om de code te testen.

WMI-tijden kunnen een beetje cryptisch zijn. Daarmee bedoelen we als u kijkt naar de LastBootUpTime-property, staat er 2013-03-19 om 18:26:21, maar om een ​​of andere reden besloten de WMI-jongens om dat alles samen te voegen tot een enkele reeks. Gelukkig hoeven we ons geen zorgen te maken over het handmatig parseren van de reeks, omdat er een eenvoudigere manier is om dit te doen, zij het geavanceerder. U moet het Select-Object-gedeelte van de code zo wijzigen dat het er als volgt uitziet:

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

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

Wat we hier doen is het maken van een aangepaste eigenschap met de naam "Last Booted" en specificeren dat de waarde ervan het resultaat moet zijn van het aanroepen van de statische ToDateTimemethode op de LastBootUpTime-eigenschap van het huidige pijplijnobject. Uw code zou er nu zo uit moeten zien.

Als u de code nu uitvoert, krijgt u een veel beter leesbare laatste opstarttijd.

Nu we tevreden zijn met de basisfunctionaliteit van ons script, moeten we het opslaan. Laten we het voor de eenvoud opslaan als het volgende:

C: \ Get-LastBootTime.ps1

Schakel nu over naar de onderste helft van de ISE en voer het volgende uit:

C: \ Get-LastBootTime.ps1

Geweldig! Ons script werkt zoals verwacht, maar er is nog steeds een probleem met ons script. We hebben de naam van de computer hard gecodeerd waarvoor we de laatste opstarttijd willen krijgen. In plaats van hardcodingwaarden, moeten we liever een parameter opgeven zodat iedereen die het script gebruikt, kan kiezen op welke computer zij het script uitvoeren. Om dat te doen, gaat u naar de bovenkant van uw script en doet u het volgende.

param(
[string] $ Computernaam
)

Vervang dan de hardcoded localhost waarde door $ Computernaam-variabele. Uw script zou er nu als volgt uit moeten zien:

Sla uw script op en ga terug naar de onderste helft van de ISE en bekijk de hulp voor uw script.

help C: \ Get-LastBootTime.ps1

Geweldig, dus nu kunnen we de naam van de computer specificeren waarop we de laatste opstarttijd willen zien voor het gebruik van onze nieuwe ComputerName-parameter. Helaas zijn er nog steeds een paar dingen mis. Ten eerste is de Computernaam-parameter optioneel en ten tweede is dat de lelijkste die ik ooit heb gezien, dus laten we die problemen snel oplossen. Om de parameter Computernaam verplicht te maken, wijzigt u de inhoud van het param-blok in het volgende.

[Parameter( Mandatory = $ true)] [string] $ Computernaam

Wat betreft het maken van een beter hulpbestand, de meest gebruikte methode is om op reacties gebaseerde hulp te gebruiken. Dat betekent dat we gewoon een extra lange opmerking toevoegen aan het top of out-script.

& lt; #
. SYNOPSIS
Geeft aan wanneer uw pc voor het laatst is opgestart.
. BESCHRIJVING
Dit is een WMI-wrapperfunctie om de tijd te krijgen dat uw pc voor het laatst is opgestart.
. PARAMETER Computernaam
De naam van de computer waarvoor u de opdracht wilt uitvoeren.
. VOORBEELD
Get-LastBootTime -ComputerName localhost
. LINK
www.howtogeek.com
# & gt;

Als alles klaar is, zou je een script moeten krijgen dat er zo uitziet.

Laten we nu eens kijken naar ons nieuwe helpbestand.

Ahhh, ziet er goed uit! Nu ons script compleet is, hebben we nog een laatste ding te doen: testen. Hiervoor ga ik de ISE verlaten en ga ik terug naar de PowerShell-console zodat we zeker kunnen stellen dat er geen anomalieën zijn.

Als u begint met een eenvoudige voering en er gewoon aan blijft bouwen zoals we in deze handleiding hebben gedaan, zult u het snel snappen. Dat is alles voor deze tijd mensen, zie je in de volgende installatie van Geek School.