Geek School Skriver ditt første Full PowerShell Script
For noen uker siden viste The Geek deg hvordan du kan bruke kommandoprompten for å finne når datamaskinen ble startet sist. I denne siste installasjonen av Geek School for PowerShell skal vi skrive en gjenbrukbar PowerShell-kommando for å gjøre det samme.
Husk å lese de forrige artiklene i serien:
- Lær hvordan du automatiserer Windows med PowerShell
- Lære å bruke Cmdlets i PowerShell
- Lære hvordan du bruker objekter i PowerShell
- Læreformatering, filtrering og sammenligning i PowerShell
- Lær å bruke Remoting i PowerShell
- Bruke PowerShell til å få informasjon om datamaskinen
- Arbeider med samlinger i PowerShell
- Lær hvordan du bruker jobb i PowerShell
- Lær hvordan du utvider PowerShell
- Lære PowerShell Variabler, Input og Output
Skrive ditt første skript
Det første vi må gjøre er å finne en måte å få tilgang til informasjonen vi leter etter. Siden vi arbeider med ledelsesinformasjon, må vi sannsynligvis ta en titt på bruk av WMI, som faktisk har en klasse som heter Win32_OperatingSystem, som lar deg se verbose opplysninger om operativsystemet ditt, inkludert sist gang det startet opp.
Så nå som vi vet hvor vi kan finne informasjonen vi leter etter, åpner du ISE og skriver inn følgende.
Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |
Velg-objekt -Property CSName, LastBootUpTime
Merk: Jeg måtte dele koden min over to linjer slik at alt passer inn i skjermbildet, men vær så snill å skrive det på en enkelt linje. Hvis du velger å dele den over to linjer, må du passe på at rørkarakteren er siste tegn på linje 1.
Klikk nå på den grønne "Run Script" -knappen eller trykk F5-tasten på tastaturet for å teste koden.
WMI ganger kan være litt kryptisk. Dermed mener vi at hvis du ser på LastBootUpTime-eiendommen, står det 2013-03-19 klokka 18:26:21, men av en eller annen grunn bestemte WMI-gutta seg for å sammenkalle alt dette til en enkelt streng. Heldigvis for oss trenger vi ikke å bekymre oss for å manuelt analysere strengen, da det er en enklere måte å gjøre det på, om enn mer avansert. Du må endre Select-Object-delen av koden for å se slik ut:
Velg-objekt -Property CSName, @ n = "Sist oppstartet";
e = [Management.ManagementDateTimeConverter] :: ToDateTime ($ _. LastBootUpTime)
Det vi gjør her er å skape en egendefinert egenskap som heter "Last Booted" og angir at verdien sin må være et resultat av å ringe statisk Metod til ToDateTime på LastBootUpTime-egenskapen til det nåværende pipelineobjektet. Koden din skal nå se slik ut.
Kjører koden nå vil gi en mye mer lesbar siste oppstartstid.
Nå som vi er fornøyd med grunnleggende funksjonalitet i skriptet vårt, må vi lagre det. For enkelhet, la oss lagre det som følgende:
C: \ Get-LastBootTime.ps1
Bytt nå til nederste halvdel av ISE og kjør følgende:
C: \ Get-LastBootTime.ps1
Flott! Skriptet vårt virker som forventet, men det er fortsatt et problem med skriptet vårt. Vi hardcoded navnet på datamaskinen vi ønsker å få siste oppstartstid for. I stedet for hardcoding verdier, bør vi heller gi en parameter slik at den som bruker skriptet, kan velge hvilken datamaskin de kjører skriptet mot. For å gjøre det, gå til toppen av skriptet ditt og gjør følgende.
param (
[String] $ datamaskinnavn
)
Deretter erstattes den hardkodede localhost-verdien med $ ComputerName-variabelen. Skriptet ditt skal nå se slik ut:
Lagre skriptet ditt, og hodet tilbake til bunnen av ISE, og se hjelpen til skriptet ditt.
hjelp C: \ Get-LastBootTime.ps1
Awesome, så nå kan vi spesifisere navnet på datamaskinen vi vil ha siste oppstartstid for å bruke vår nye ComputerName-parameter. Dessverre er det fortsatt et par ting feil. For det første er parameternavnet Parameter valgfritt, og for det andre, det er den grimeste nyttig jeg noensinne har sett, så la oss løse disse problemene raskt. For å gjøre parameternavnet Parameter obligatorisk, endre innholdet til param-blokken til følgende.
[Parameter (obligatorisk = $ true)] [streng] $ datamaskin
Når det gjelder å lage en bedre hjelpefil, er den vanligste metoden å bruke kommentarbasert hjelp. Det betyr at vi bare legger til en ekstra lang kommentar til toppen av utskrift.
<#
.SYNOPSIS
Viser når sist din PC startet opp.
.BESKRIVELSE
Dette er en WMI wrapper-funksjon for å få den tiden PCen din sist startet opp.
.PARAMETER ComputerName
Navnet på datamaskinen du vil kjøre kommandoen mot.
.EKSEMPEL
Get-LastBootTime -ComputerName localhost
.LINK
www.howtogeek.com
#>
Når alt er gjort, bør du ende opp med et skript som ser ut som dette.
La oss nå gå og sjekke ut vår nye hjelpefil.
Ahhh, ser bra ut! Nå som vårt skript er fullført, har vi en siste ting å gjøre: testing. For dette skal jeg gå ut av ISE og gå tilbake til PowerShell-konsollen akkurat slik at vi kan sørge for at det ikke er noen anomalier.
Hvis du starter med en enkel en liner og bare fortsetter å bygge på den som vi gjorde i denne guiden, vil du få tak i det på kort tid. Det er alt for denne gangen folk, ser deg i neste installasjon av Geek School.