Powershell script eksempler
Her følger to scripts som oppfølging til forrige posting om scripting i Powershell. Det første scriptet henter ut informasjon fra eventlogen basert på input fra brukeren og det neste henter ned en webside og viser headers. Scriptene kunne vært laget på en rekke andre måter, men er blitt som de er for å illustrere flere poeng.
Eksempel 1: Eventlog
# Søke gjennom utvalgt logg etter gitte søkekriterier
write-host "Search through event logs"
$log = read-host "Choose log: "
## Her leses input fra brukeren inn i variabelen $log. Det gjøres ingen evaluering av input i dette scriptet og feilen håndteres heller ikke dersom brukeren taster inn navnet på en logg som ikke eksisterer.
write-host ""
write-host " 1) EventID"
write-host " 2) Message"
write-host " 3) Source"
$type = read-host "Choose search type"
## Brukeren velger her blant tre alternativer hva det skal søkes på. Verdien lagres i $type og håndteres med en switch lenger ned.
write-host "No need to use wildcards for message or source."
$query = read-host "Search for"
## Query/søkekriteriet hentes inn fra brukeren og lagres i $query
$limit = read-host "Type a number to limit matches, default 1000, or push enter to search"
## Kan være greit med en begrensning i antall elementer som hentes, ellers kan det fort ta lang tid hvis loggen er stor. Input lagres i $limit. Om brukeren ikke skriver inn noe, bare trykker enter, vil standard verdien under bli benyttet.
if ($limit -eq "") {
$limit = 1000
}
## Standard verdien settes dersom brukeren ikke har angitt noe annet
switch ($type) {
## Switch basert på hvilken type søk brukeren ønsker utført
1 {$r = get-eventlog -log $log -newest $limit | where-object {$_.Eventid -eq $query}; break}
2 {$r = get-eventlog -log $log -newest $limit | where-object {$_.Message.contains($query)}; break}
3 {$r = get-eventlog -log $log -newest $limit | where-object {$_.Source.contains($query)}; break}
## her velges "søkekommando" ut fra $type sin verdi. Den eneste egentlige forskjellen er søkekriteriet, så her kunne get-eventlog og søk i resultatet vært atskilt. Det benyttes her en standard kommando som er nyttig når man bruker powershell som kommandolinje og, nemlig where-object. Hele ekstraktet fra eventlog pipes gjennom denne kommandoen for å søke.
}
$r | format-table ##time,type,source,eventid,Message
## Til slutt formateres det hele. Det finnes en rekke slike kommandoer for formatering og sortering. (format-list, format-custom, format-wide, sort-object)
Eksempel 2: HTTP
##Hente ut HTTP Headers fra en site
$url = read-host "Full URL to page: "
write-host "Getting headers... "
## Henter inn adressen fra brukeren, lagres i $url
if ($url -notmatch "^[a-z]+://") { $url = "https://$url" }
# Være sikker på at at http er med i strengen
$t1 = get-date
## Hente ut et System.DateTime objekt for å ta tiden
$http = new-object -com MSXML2.XMLHTTP
## Lage et objekt av typen XMLHTTP
$http.Open("GET", $url, $FALSE)
## Bygge opp HTTP Request
$http.Send()
## Utføre requesten og få data tilbake
$http.getAllResponseHeaders()
##Vise fram alle headers som ble mottat
$t2 = get-date
## Hente DateTime på nytt
$time= $t2 - $t1
write-host "Execution time: " $time.totalMilliseconds "milliseconds"
## Regne ut hvor lang tid det tok og vise resultatet i ms.