GAPTHEGURU

Geek with special skills

Powershell – Intro

Grunnleggende oppbygging

PowerShell kan startes enten fra Start->Alle
programmer->Tilbehør->Windows PowerShell eller ved å skrive
powershell.exe i Kjør-vinduet. Bortsett fra navn og bakgrunnsfarge kan
man få inntrykk av at dette er cmd.exe i ny drakt:

clip_image002

Men det er langt fra sannheten! PowerShell er et interaktivt shell,
et scriptmiljø og en automasjonsmotor som bygger på .NET. Siden .NET er
et objektorientert språk, er også PowerShell objektorientert. Dette vil
si at alt i PowerShell er oppbygd av objekter. Kommandoene i PowerShell
heter cmdlets (uttales kommandlets), og har en konsistens som bygger på
verb-bindestrek-substantiv. Eksempler på verb er Get, Set, Remove, New,
Start og Stop, altså noe man kan gjøre. Eksempler på substantiver er
Service, Process, Item, Computer og User. Dette kan gi oss eksempler som
Get-Service, New-User, Set-User og Start-Service.

I forrige avsnitt ble det nevnt at parametre i ulike
kommandolinje-verktøy tradisjonelt har vært forskjellige. I PowerShell
angis parametre alltid med bindestrek. Eksempelvis Start-Service –Name “Print Spooler”.

Som en grunnleggende start kan du begynne med å lære deg følgende to cmdlets:

Get-Command – lister alle tilgjengelige kommandoer

Get-Help – viser hjelpetekst for angitt kommando

Et eksempel på dette er Get-Help Start-Service, som vil vise syntaks og bruk av Start-Service.

De fleste finner fortere ut av ting ved å se praktiske eksempler enn å
måtte lese lange instrukser. Eksempler kan man få fram ved å legge til
parameteren –Examples:

clip_image004

I versjon 2.0 ble det lansert et grafisk verktøy for PowerShell som
heter Windows PowerShell Integrated Scripting Engine (Windows PowerShell
ISE).

clip_image006

Her har man en fullverdig scripteditor med syntaks-farger (høyre
side), et output vindu (øverst til venstre) og en kommandolinje (nederst
til venstre). Dette gjør scripting og feilsøking (debugging) vesentlig
enklere, uten å måtte sette seg inn i og kanskje kjøpe et 3. parts
produkt.

PowerShell bygger på en automasjonsmotor, og konsollapplikasjonen
powershell.exe er i realiteten en host applikasjon for
PowerShell-motoren. Host applikasjonen kan også være en grafisk
applikasjon, noe vi allerede har et innebygd eksempel på i versjon 2.0 i
form av PowerShell ISE. Andre applikasjoner kan også bygges på denne
motoren, noe 3. parts scripteditorer er et eksempel på.

clip_image008

Grunnleggende oversikt over PowerShell`s oppbygning

For en videre innføring i Windows PowerShell vil jeg anbefale
artikkel-serien på 7 deler jeg har hatt gleden av å skrive sammen med
Ragnar Harper. Link finner du under “Ressurser” nederst i denne
artikkelen.

Utvidelser

De fleste som administerer Windows-miljøer er kjent med Microsoft
Management Console, MMC. Dette er et grafisk verktøy hvor man kan legge
til og fjerne såkalte snap-ins. Ulike produkter og features som Active
Directory, Group Policy og servicer kan administreres via snap-ins.

clip_image010

Tilsvarende funksjonalitet finner vi i PowerShell i det som i versjon
1.0 het snapins, og som i versjon 2.0 ble erstattet av moduler. En
oversikt over tilgjengelige moduler får man ved å kjøre Get-Module med
parameteren –ListAvailable:

clip_image012

Vil man ta i bruk en modul kjører man Import-Module –Name “Navn på modul”. Eksempel:

clip_image014

For å se de nye kommandoene som nå har blitt tilgjengelige kjører man Get-Command med parameteren –Module “navn på modul”. Eksempel:

clip_image016

Man vil da få opp listen over 76 nye kommandoer i PowerShell for å administrere Active Directory.

PowerShell 2.0 i seg selv uten innlastede moduler/snapin inneholder 236 kommandoer.

Fra og med Windows Server 2008 har Microsoft et verktøy som heter
Server Manager som samler snapins for installerte roller, features og
operativsystem-funksjoner i ett konsoll.

For å sammenligne dette med tilsvarende funksjonalitet i PowerShell kan
vi basert på det vi har sett på hittil kjøre følgende for å laste inn
PowerShell-modulen ServerManager og se de tilgjengelige kommandoene:

clip_image018

Akkurat som i MMC kan man laste inn flere moduler, og dermed jobbe med flere produkter og features samtidig.

Moduler og snapins er ikke bare begrenset til Microsoft selv. 3.
parter kan lage egne moduler og snapins for sine produkter. I de siste
par årene har flere og flere 3. parter kommet til med PowerShell-støtte i
sine produkter.

Fjernadministrasjon

En av de største og viktigste nyhetene i PowerShell 2.0 er remoting.
Dette gjør det mulig å koble seg til en eller flere eksterne maskiner
via PowerShell. Det eksisterer i grove trekk 3 former for remoting:

  • En til en – kan gjerne sammenlignes med SSH i Unix/Linux, og gjør
    det mulig å jobbe interaktivt med en maskin via PowerShell i stedet for
    den tradisjonelle metoden med eksternt skrivebord.
  • En til mange – gjør det mulig å kjøre en kommando eller et script mot flere maskiner samtidig.
  • Mange til en – et eksempel på denne formen for remoting er
    PowerShell hosting provideren i Internet Information Services (IIS), som
    gjør det mulig for flere maskiner å koble seg til IIS for å eksempelvis
    administrere en tjeneste på den aktuelle maskinen

Remoting i PowerShell bygger på en tjeneste i Windows som heter
Windows Remote Management (WinRM). Dette er Microsoft`s implementering
av industristandarden Web Services-Management, som er en definert
DMTF-standard.

WinRM er en web-basert tjeneste som benytter http. Tidligere har
fjernadministrasjon i Windows i stor grad vært bygget på RPC, som er en
lite brannmur-vennlig protokoll som benytter dynamiske porter. Standard
port for WinRM er TCP 5985.

Produkt-integrasjoner

Det første Microsoft-produktet bygget på Windows PowerShell var
Microsoft Exchange Server 2007, som ble lansert 16 dager etter Windows
PowerShell i November 2006. Siden da har mange andre produkter blitt
lansert med PowerShell-støtte, blant annet System Center Operations
Manager 2007 R2, System Center Virtual Machine Manager 2008/2008 R2 og
SQL Server 2008/2008 R2.

Fra og med Windows 7 og Windows Server 2008 R2 er også flere
operativsystem- og server-tjenester basert på PowerShell. Eksempler på
dette er Windows Troubleshooting Platform som i sin helhet kjøres med
PowerShell-kommandoer i bunn. Server-tjenester som Active Directory,
Windows Failover Clustering, Network Load Balancing og Remote Desktop
Services tilbyr alle PowerShell-moduler for administrasjon.

Det som var revolusjonerende med Exchange Server 2007 var at det var
det første produktet til å ta i bruk konseptet med at alt av
administrasjon rundt produktet bygges rundt PowerShell. Det bygges
deretter et grafisk MMC-konsoll som for hver operasjon som utføres
kjøres i bakgrunnen som PowerShell-kommando. Exchange Server 2007 er et
veldig bra eksempel på hvordan dette kan gjennomføres, siden de på
slutten av veiviserne i MMC-konsollet viser de faktiske
PowerShell-kommandoene som kjøres i bakgrunnen. Dette gjør det vesentlig
enklere å automatisere en oppgave, ved å først utføre den i
MMC-konsollet og se hvilken kommando som ble kjørt, for deretter å
kopiere denne til eksempelvis PowerShell ISE for sammensetning til et
script.

Grunnet tidspress før utgivelse rakk ikke Exchange-teamet å
tilgjengeliggjøre alle aspekter ved administrasjon av Exchange Server
2007 i MMC-konsollet, noe som møtte en del kritikk fra administratorer
som først og fremst vil bruke et grafisk verktøy. Dette har i stor grad
blitt rettet i senere Service Packs, samt den nyeste versjonen Exchange
Server 2010.

Praktisk bruk

For å illustrere hvilke gevinster man kan oppnå ved å automatisere
prosesser med PowerShell skal vi se på noen praktiske eksempler.

Windows Update er noe alle må ha et forhold til for å ivareta sikkerhet.
En mye brukt praksis er å konfigurere klienter for automatisk
nedlasting og installasjon av oppdateringer, mens det på server-siden
utføres manuell installasjon. Årsaken til dette er blant annet
avhengigheter i forhold til oppstartsrekkefølge og redundante systemer.
Dermed er det mange som utfører dette manuelt på hver server, noe som
fort blir tidkrevende i miljøer med mange servere. I enterprise-miljøer
håndteres slikt av systemer som eksempelvis BigFix. Slike løsninger blir
gjerne for dyre og komplekse for SMB-miljøer. En kontrollert
automatisering av Windows Update ved hjelp av PowerShell kan da være
godt alternativ. For å kontrollere rekkefølge settes det typisk opp
flere bulker av servere, dette kan gjerne være så enkelt som tekst-filer
eller OU`er i Active Directory.

Skjermbilder og eksempel på et script for automatisering av Windows Update kan du finne i dette blogg-innlegget.

Et annet eksempel vi skal se på er administrasjon av servere. For
pålogging til servere i mindre miljøer er bruk av “Eksternt
skrivebord”-klienten i Windows tilstrekkelig, men i større miljøer er
det mer praktisk med verktøy som eksempelvis VisionApp Remote Desktop,
Royal TS og Remote Desktop Connection Manager. Remote Desktop Connection
Manager er et gratis verktøy fra Microsoft for fjernstyring av servere,
og konfigurasjonsfilen er i XML-format. Å jobbe med XML i PowerShell er
forholdsvis enkelt, og sammen med PowerShell-modulen for Active
Directory er det mulig å hente ut alle server-navn og sette sammen en
konfigurasjonsfil for Remote Desktop Connection Manager. Du finner mer
detaljer og link til nedlasting av script her.

I den siste utgaven av Windows Server – 2008 R2 – inneholder Server
Manager et nytt verktøy som heter Best Practices Analyzer. Dette er som
navnet indikerer et verktøy som kan scanne de fleste server-roller og
komme med en oversikt over hva som er, og ikke er, i henhold til
anbefalte retningslinjer fra Microsoft.

Dette er en nyttig funksjon som gir oss innblikk i om konfigurasjonen av
ulike server-roller er i henhold til de anbefalte retningslinjene, men
for de som har et større antall servere er det en tidkrevende oppgave å
logge på hver server, starte Server Manager, og for hver server-rolle
trykke på “Scan this role”.

Siden Best Practices Analyzer er en PowerShell-modul som i realiteten
kjører i bakgrunnen når man scanner en server-rolle, er det mulig å
automatisere prosessen ved hjelp av PowerShell remoting. Et eksempel på
et script som utfører dette, og samtidig gir muligheten for å få
rapporter på e-post samt CSV- og HTML-format er tilgjengelig her.

I det siste eksempelet skal vi se på oppretting av brukerobjekter i
Active Directory. Å opprette en bruker via det velkjente MMC-konsollet
Active Directory Users and Computers er en grei sak. Siden stadig flere
produkter er Active Directory-integrert er det som regel flere
administrasjons-verktøy en bruker må opprettes i. Eksempler på dette er
Exchange Server og Microsoft Communications Server. I tillegg skal
brukerne gjerne ha hjemmeområder hvor riktige rettigheter skal settes,
brukeren skal meldes inn i grupper og så videre. Til slutt begynner
dette å bli en omfattende oppgave. Skal man opprette mange brukere,
eksempelvis hver sommer i skole-miljøer, vil dette være en tidskrevende
oppgave samtidig som at det er en risiko for at man gjør feil på èn
eller flere brukere. Ved hjelp av PowerShell er det mulig å utføre alle
disse oppgavene på en gang, noe som både er tidsbesparende og er med og
kvalitetssikrer resultatet.

Har man brukerinfo i for eksempel et Excel-ark som kan lagres i
CSV-format, eller en database fra et fagsystem, kan dette brukes som
datagrunnlag ved import. PowerShell MVP Don Jones har en artikkel-serie
om bruker-oppretting (user provisioning) på 4 deler i TechNet Magazine
hvor han går gjennom oppretting av brukere fra en CSV-fil, oppretting av
mailbox i Exchange, oppretting av hjemmeområde, setting av rettigheter
og så videre.

Dette var noen utvalgte områder som kan automatiseres for effektivisering av hverdagen for ITPro`er.

Oppsummering

PowerShell er en viktig del av Windows operativsystemer, og er kommet
for å bli. Alle nye server produkter fra Microsoft vil ha full støtte
for PowerShell, i tillegg til at stadig flere 3. parts produkter følger
etter.

Dette har en revolusjonerende innvirkning på administrasjon og automatisering av Microsoft`s produkter og operativsystemer.

Ser man på de praktiske eksemplene fra forrige avsnitt ser man hvor
mye inntjening man kan få i form av effektivitet og spart tidsbruk.

Personlig mener jeg ikke at alle skal sette seg dypt inn i PowerShell
for å skrive avanserte script og automatisere oppgaver. Derimot mener
jeg det er viktig at de som jobber med Microsoft-produkter setter seg
inn i hva PowerShell er, bruk av grunnleggende funksjonalitet, og vet om
potensialet som ligger der. Dette gjør at man ved behov kan benytte
kommandoer, script og moduler som følger med Windows og ulike produkter.
I tillegg er det en bred community rundt PowerShell, og veldig mange
personer deler ting de har laget. Det fins også mange forum og nettsider
hvor man kan få hjelp til alt fra grunnleggende spørsmål til mer
avanserte temaer.

Ikke alle har tid til å bruke tid i en hektisk hverdag på å sette seg
inn i nye ting, men det er kommet offisielle kurs fra Microsoft som er
tilgjengelig. I tillegg til dette fins det mye gratis ressurser på
internett, en del av disse finner du linker til i neste avsnitt.

Jeg vil avslutte denne artikkelen med et sitat fra PowerShell`s
arkitekt, Jeffrey Snover: “If you’re using Windows and not retiring in the next 12 to 18 months, you need to learn PowerShell”.

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: