Geek School: Skrive ditt første Full PowerShell Script

Innholdsfortegnelse:

Geek School: Skrive ditt første Full PowerShell Script
Geek School: Skrive ditt første Full PowerShell Script

Video: Geek School: Skrive ditt første Full PowerShell Script

Video: Geek School: Skrive ditt første Full PowerShell Script
Video: Psexec.exe: A Powerful tool for IT Admins - YouTube 2024, April
Anonim
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.
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å datamaskininformasjon
  • 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 har å gjøre 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 siste gang det startet.

Så nå som vi vet hvor vi kan finne informasjonen vi leter etter, åpner du ISE og skriver inn følgende.
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 |

Select-Object -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.
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:
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:

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

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

Hva vi gjør her, er å lage 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.
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:
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:
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.
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]$ComputerName )

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.
Lagre skriptet ditt, og hodet tilbake til bunnen av ISE, og se hjelpen til skriptet ditt.

help 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 parameteren ComputerName valgfri, og for det andre, det er den grimeste nyttig jeg noensinne har sett, så la oss løse disse problemene raskt. For å gjøre datamaskinparameteren obligatorisk, endre innholdet i param-blokken til følgende.
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 parameteren ComputerName valgfri, og for det andre, det er den grimeste nyttig jeg noensinne har sett, så la oss løse disse problemene raskt. For å gjøre datamaskinparameteren obligatorisk, endre innholdet i param-blokken til følgende.

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

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 Shows when last your PC started up..DESCRIPTION This is a WMI wrapper function to get the time that your PC last started up..PARAMETER ComputerName The name of the Computer you want to run the command against..EXAMPLE 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.

Anbefalt: