Share via


Windows Powershell (hvordan komme i gang)

Windows Powershell er et kommandolinjegrensenitt og scripting språk. Windows Powershell kjører på Windows XP, Windows Server 2003 og Windows Vista. Powershell vil også være mulig å benytte i stor grad med andre tjenester, som System Center, og er faktisk standard grensesnitt mot Exchange 2007. Da riktignok også med GUI som generer Powershell script.

Det er også mulig å kjøre alle gode gamle kommandoer, som ipconfig, rett i Windows Powershell. Alle innebygde kommandoer er definert på formen verb-substantiv, som regel med rimelig innlysende ordbruk og med ulike alias for å gjøre scriptingen raskere. Alt-tab autocomplete av kommandoer fungerer også. Det hele er meget objekt-orientert og f.eks når man ber om en liste over kjørende prosesser er det en samling av .Net objekter som blir vist fram. Dette er et viktig poeng å ta til seg for å få mest mulig ut av Powershell, spesielt om man er vant til gamle CMD.exe, der en tekst liste på skjermen var tekst og ikke noe mer. Her er det objekter man kan bruke videre.

 

 

Under finner du første del av en rekke eksempler med enkel bruk av powershell for å komme i gang og forstå bedre hvordan språket er bygget opp.

 

Eks. 1:

Om du ønsker å hente ut en liste over kjørende prosesser er ikke dette spesielt vanskelig å komme fram til riktig kommando selv uten å ha lest hva som er tilgjenglig. Det første du ønsker, verbet som skal utføres, er å få tak i noe (en liste), noe som betyr Get. Det neste er hva du vil ha en liste over, det er Prosess. Så kommando resultatet blir Get-Process. Noe som gir følgende resultat:

 

Eks. 2:

Det neste du kanskje ønsker å gjøre er å hente ut mer info om en spesiell prosess. Det kan gjøres i all enkelt ved å kjøre lista gjennom et filter, ved hjelp av kommandoen where-object.

get-process | where-object {$_.name -eq "taskeng"}

Her betyr $_ gjeldende objekt, det man sammenligner mot til enhver tid, samme som i perl. -eq betyr Equal og "taskeng" er det prosess navnet jeg ser etter.

 

Eks. 3:

Det neste som kan være interessant er å se hvilke medlemmer objektene i prosess lista faktisk har og dermed hva vi kan bruke sammen med $_.name for å angi flere eller andre kriterier. Kommandoen Get-Member viser dette lett.

get-process | get-member

 

Eks. 5:

Siste eksempelet tar for seg en veldig praktisk funksjon, som er innebygget i flere kommandoer og angis som et parameter. Parameteren kalles -whatif og sørger for at kommandoen ikke blir utført, men kun gir beskjed tilbake om hva som ville skjedd dersom du utførte kommandoen.

stop-process 2176 -whatif

Tilbakemeldingen forteller at dersom du hadde utført kommandoen ville prosessen wuauclt blitt stoppet.  Stop-process har også aliaset kill

 

Eks. 4:

Etter å ha listet opp og filtrert bort uinteressante prosesser kan du så bruke et foreach-object utsagn for å utføre en operasjon mot hver prosess eller hente ut data fra hver av dem. Linja under tar alle prosesser som passer til kriteriet og kjører en Stop-Process mot disse. Legg merke til at prosess objektets egen Kill metode kalles.

 

 (get-process | where-object {$_.name -eq "notepad"}) | foreach-object {$_.kill()}

 

Dette kunne vært gjort på flere ulike måter, kortet ned med ulike alias og lignende.

PS C:\Windows\System32> (get-process | where {$_.name -eq "notepad"}) | % {kill $_.id}

PS C:\Windows\System32> (get-process | where-object {$_.name -eq "notepad"}).kill()

Siste eksempelet vil ikke fungere dersom det er mer enn ett treff, da kill metoden kun kan kalles direkte på et objekt og ikke en samling objekter.

 

Mer avanserte eksempler:  

 Dette eksempelet tar de 100 nyeste elementene fra Eventlog og henter ut alle som er av EntryType Information

$events = get-eventlog -logname system -newest 100

$events | where { $_.entrytype -eq "Information"}

Ved å legge til en enkel pipe til på siste linja kan du få ut en enklere oppsummering: | group-object source

Dette vill gruppere og summere resultatene basert på hvilke source som er angitt i Eventlog entrien.

 

 

WMI er også lett tilgjenglig fra Powershell. Prøv med kommandoen:

get-wmiobject win32_bios | get-member

Dette vil gi deg en liste med hva som er mulig å trekke ut av denne WMI klassen. Nå kan du lett hente ut properties du måtte ønske ved å bruke parenteser rundt (get-wmiobject win32_bios).version eller ved å lagre dette objektet i en variabel:

 

 $wbios = get-wmiobject win32_bios
$wbios.version
$wbios.description
$wbios.serialnumber

Dette kan også lett kjøres mot andre maskiner ved å bruke parameteren -computername for get-wmiobject kommandoen.

 

Sjekk ut Windows Powershell hjemmesider for mer info, eksempler og mye mer

 

 Windows Vista klar utgave, Download