Kom igang guide for Powershell

Jeg har lenge tenkt å publisere en del artikler jeg har skrevet om bruk av Powershell. Nå har jeg endelig startet på denne serien om hvordan du kommer igang med Powershell. Jeg vet ikke hvor mange artikler det blir ennå, men jeg har tenkt å ta alle igjennom det mest grunnleggende.

Oppstart av PowerShell

Du kan starte Powershell kommandolinjen fra Start-menyen eller fra Kjør ved å taste inn ”powershell” som vist i figuren. Med Powershell 2.0 kommer det to varianter av Powershell konsoll fra Microsoft. Det ene konsollet er som en tradisjonell kommandolinje. Den andre er som en moderne kommandolinje bygd som ett grafisk verktøy. Vi starter her med å se på den tradisjonelle kommandolinjen:

image

Alternativt kan du starte PowerShell fra startmenyen.

image

Når PowerShell starter opp er det flere ting som skjer. Dette skal vi se på nærmere ganske snart, men kort fortalt lastes det inn en profil som setter arbeidsmiljøet. I denne kan det for eksempel lastes inn utvidelser, som gjør at PowerShell støtter flere kommandoer enn det som er med standard.

Slik ser Windows Powershell ut når jeg starter det på min maskin.

image

Om du ønsker å starte den “moderne” varianten av en kommandolinje, skal du se etter Powershell ISE. Om jeg i min Windows 7 klient skriver Powershell i søkefeltet på Start-menyen får jeg opp følgende varianter:

image

Du starter Powershell ISE ved å trykke på image

ISE står for Integreted Scripting Environment, og ser slik ut

image

Du kan velge og benytte den som passer deg best for kommandoene som følger.

For at kommandolinja skal føles så ”kjent” som mulig er det definert en god del aliaser som gir tilnærmet funksjonaliet med det vi er vant med fra blant annet cmd.exe. Vi kan også selv sette opp aliaser hvis vi ønsker. Ett enkelt eksempel er kommandoen dir

dir

image

Med PowerShell startet Microsoft med blanke ark. En av de grunnleggende viktige tingene de avgjorde var at kommandoer skal ha gjenkjennelig syntaks. I dette ligger det at alle kommandoer skal følge en fast struktur. I praksis betyr dette at alle kommandoer ha følgende format :

verb-substantiv . Som du allerede har erfart bryter kommandoen dir med dette mønsteret. Men dir er altså ett alias for Get-ChildItem.

Du kan teste dette ved å skrive kommandoen Get-ChildItem

Get-Childitem
image 

Merk at du kan bruke TAB til å automatisk fullføre det du skriver på. Skriver du Get- og trykker TAB, blar du deg gjennom mulighetene som starter med Get-.

For å skaffe deg en oversikt over kommandoene som er tilgjengelig kan du kjøre kommandoen Get-Command.

Get-Command

image

Legg merke til at Get-Command viser alle ulike typer for kommandoer du har tilgjenglig. Om du kun ønsker å se rene Powershell CmdLet’s gjør du dette ved å bruke parameteren CommandType på følgende måte:

Get-Command -CommandType CmdLet

image

En nyttig kommando er Start-Transcript. Denne kommandoen fanger opp kommandoene du kjører, samt resultatet av kommandoen. Det blir en tekstfil, med komplett logg, slik at du kan gå tilbake senere.

image

Tips: Det finnes også andre varianter av Powershell kommandolinjen enn den som Microsoft tilbyr. Tredjeparts miljø er for eksempel Powershell+ og PowerGUI. PowerShell+ er et avansert kommandolinje basert Powershell miljø, mens PowerGUI er et grafisk grensesnitt for Powershell. Du kan se nærmere på PowerGUI på www.powergui.com og Powershell+ finner du på www.idera.com

Navigering i PowerShell

Du navigerer i PowerShell med kommandoen Set-Location. Etter som at du er vant til å benytte cd i cmd.exe, er cd opprettet som alias for Set-Location.

En av de tingene som er kjekt å huske til å begynne med er at cd.. eller cd\ gir feil i standard PowerShell. Du må ha med mellomrom mellom kommandoen og parameteren. Du må altså skrive cd .. eller cd \ .  Du opplever dog ikke dette mange steder på grunn av at det er definert funksjoner som heter cd.. og cd\ som utfører operasjonen for deg.

PowerShell skiller seg også fra tidligere kommandolinje med at den inneholder providere til ulike systemer. Med dette mener jeg at du ikke er begrenset til filsystemet, men at du også kan navigiere inn i registry, sertifikat store, Active Directory med flere. Støtte for flere systemer kan enkelt legges til. Benytt kommandoen Get-PSDrive for å se hvilke PowerShell ”stasjoner” du har tilgjengelig.

Get-PSDrive

image

Om du titter på listen over ser du navnet (Name) på stasjonen (dette er navnet du navigerer med). To andre viktige ting du ser er Provider og Root. Provider sier hvilken type stasjon dette er. Root sier lokasjonen til denne stasjonen.

La oss nå navigere inn i registry på maskinen. Hvis du ønsker å navigere inn i HKEY_CURRENT_USER, kan du skrive cd hkcu:

cd hkcu:

Dette er det samme som å skrive:

Set-Location hkcu:

Naturligvis kan du da kjøre kommandoer der også, for eksempel dir.

dir hkcu:

image

Dir (som altså er et alias for Get-ChildItem) har mange nyttige parametre vi kan benytte, for eksempel:

-Path forteller oss banen(mappen) vi ønsker å liste ut. Aksepterer jokertegn, og kan brukes om flere baner(mapper) samtidig.

-Filter lar datakilden (provider) filtrere dataene før den sendes tilbake til Powershell

-Exclude lar oss eksludere filer fra listen. Aksepterer jokertegn.

-Include lar oss spesifiere hvilke filer som skal inkluderes. Aksepterer jokertegn.

-Force viser også skjulte elementer – elementer man ikke ser ellers.

-Recurse tar også med underliggende baner (mapper).

Følgende eksempel lister ut alle filer, untatt de med filendelsen old, bak eller tmp. Lister også ut filer i underliggende mapper:

Dir –exclude *.old,*.bak,*.tmp -recurse

Grunnleggende CmdLets

La oss ta en titt på de mest grunnleggende CmdLets du må kunne. Vi har allerede hilst på noen, blant annet Set-Location (og aliaset cd) samt Get-ChildItems (og aliaset dir).

Tabell 1 – Grunnleggende CmdLets

Kommando

Beskrivelse

Get-ChildItem

Lister ut objekter som finnes i filsystemet, registry eller andre steder. Har aliaset dir

Set-Location

Brukes for å endre aktivt sted i PowerShell. Dette kan være katalog eller system. Har aliaset cd

Set-Alias

Opprette alias for annen kommando

Set-Date

Endre dato på hostmaskina

Restart-Service

Benyttes for å restarte en service [restart-service Wsearch]

Start-Service

Benyttes for å starte en service [start-service Wsearch]

Stop-Service

Benyttes for å stoppe en service [stop-service Wsearch]

Get-Service

Lister ut services [get-service]

Set-ExecutionPolicy

Setter sikkerhetsmoduen til script – om de kan kjøres, om de må være signerte og lignende

Set-Acl

Benyttes for å sette rettigheter

Add-Content

Legge til noe i ei fil eller objekt, [add-content –path filnavn –value ”Dette er gøy”]

Get-Content

Vise innholdet av ei fil eller objekt, [get-content filnavn]

Clear-Content

Fjerner innholdet, men beholder fila eller objektet [clear-content filnavn]

Compare-Object

Sammenligner innhold.

[Compare-Object -referenceobject $(get-content filA) -differenceobject $(get-content filB) –includeequal]

New-Item

Opprette nye elementer, slik som for eksempel filer og registrynøkler

Start-Sleep

Får scriptet eller Shellet til å sove i angitte tidsperiode (sekunder)

Bruk av parametre

Du påvirker hva en CmdLet skal utføre ved å benytte parametre. Parametre angis med .

Eksempel for å opprette ei fil:

New-Item –type file ”filnavn.txt”

Her angir vi parameteren type med –type og oppgir verdien file og gir inn filnavnet. Disse benytter vi mellomrom på. Hvis vi angir parameternavn med- , spiller ikke rekkefølgen på parametrene noen rolle. Noen parametre er angitt som default, og kan benyttes uten å oppgis med navn.

La oss se på New-Item kommandoen for å opprette mapper:

New-Item –type directory “c:\logs”
New-Item –type directory “c:\temp”
New-Item –type directory “c:\temp\1\2\3\4”

Som du ser i det siste eksemplet opprettes alle mapper som eventuellt mangler for å opprette den mappa du ønsker. I vårt tilfelle betyr det at 1,2,3 og 4 opprettes i samme operasjon.

De flere cmdlets støtter også et utvalgt parametre som kalles for ubiquitous parameters. Disse er som følger:

 -debug angir at vi ønsker å få debuginformasjon hvis utvikleren har lagt det inn i kommandoen.

 -erroraction angir hvordan vi ønsker cmdlet’en skal oppføre seg ved feil. Valgene er NotifyContinue (standardvalget), NotifyStop, SilentContinue,SilentStop og Inquire

 -errorvariable angir navn på variabel som vil inneholde alle objektene som fikk feil under prosessering.

 -outvariable angir navnet på variabel som holder alle objektene i resultatet fra cmdlet.

 -verbose produserer mer informasjon rundt de handleringer cmdlet utfører, samt informasjon rundt fremdrift av prosessering.

Opprette egne alias

Du kan opprette egne alias med kommandoen Set-Alias. I gjeldende versjon av PowerShell kan du ikke sette parametre som en del av et alias. Du kan altså ikke lage et alias for kommandoen Set-Location C: , kun for Set-Location. Det er antydet fra PowerShell utviklerne at denne funksjonaliteten vil komme senere. Hvis du lurer på hvilken kommando et alias peker på, kan du lese av dette med Get-Alias.

Eksemplet lager aliaset go for kommandoen Set-Location.

set-alias go Set-Location

Nå vil go fungere likt som cd eller Set-Location. Hvis jeg lurer på hvilken kommando go er et alias for, kan jeg lese av dette med get-alias go:

get-alias go