Windows Powershell – Hva er det?

Windows Powershell – Hva er det?

Mange har hørt om PowerShell, men har ikke satt seg så mye inn i hva det er. I denne artikkelen skal vi derfor se på hva det er og hvorfor det er viktig for alle som jobber med Windows-baserte systemer.

Artikkelen er skrevet av Jan Egil Ring for TechNet Flash.

Historien bak

Som i andre industrier er det også i IT-bransjen definert standarder for administrasjon av systemer. Distributed Management Task Force (DMTF) er en industri-organisasjon som utvikler, vedlikeholder og frembringer standariseringer i IT-bransjen.

Standariseringene sørger for at det er mulig å bygge administrasjons-systemer som er uavhengige i forhold til teknologi og plattformer.

Det eksisterer en rekke standarder for eksempelvis virtualisering og hardware, men de 2 vi skal se på heter CIM og WBEM. CIM står for Common Information Model og er en standard som definerer for eksempel hvordan harddisker, printere og andre enheter representeres som objekt i et definert schema. CIM danner grunnlaget for de fleste standarder fra DMTF.

WBEM står for Web-Based Enterprise Management, og er en standard i DMTF som definerer kommunikasjonsprotokoller mellom de ulike elementene i CIM.

Som den største leverandøren av operativsystemer var også Microsoft forpliktet til å følge disse standardene. Siden Windows 2000 har Microsoft hatt pre-installert støtte for CIM og WBEM, i form av noe som heter Windows Management Instrumentation (WMI). WMI var også tilgjengelig som nedlastinger for Windows 95, Windows 98 og Windows NT.

WMI består i grove trekk av såkalte namespaces og klasser, som gjør det mulig å jobbe med alt fra hardware til tjenester og andre elementer i operativsystemet. Applikasjoner som Internet Explorer og Microsoft Office, samt server-applikasjoner som Microsoft Exchange og SQL, utvider CIM-modellen i WMI med flere klasser. Dette gjør det mulig å administrere disse applikasjonene basert på definerte standarder.

For oss som jobber med Microsoft-produkter til daglig har vi ikke så mye forhold til WMI og de nevnte standarder. Dette er ikke så rart siden WMI hovedsakelig er myntet på utviklere.

Det fins riktignok et kommandolinje-verktøy som heter Windows Management Instrumentation Command-line (WMIC), men å jobbe med WMI er forholdsvis komplekst.

En annen standard i Microsoft-miljøer er Component Object Model (COM). Dette er en grensesnitt-standard for software som ble introdusert av Microsoft i 1993. Begrepet COM er ofte brukt som et samlebegrep for teknologier som OLE, ActiveX, COM+ og DCOM.

Bortsett fra de grafiske verktøyene som er tilgjengelig har mulighetene for å masse-administrere og automatisere systemer ligget i bruk av de ulike teknologiene nevnt ovenfor, ved hjelp av for eksempel VBScript eller ulike kommandolinje verktøy. Visual Basic Scripting Edition (VBScript) bygger på Visual Basic og er et script-språk utviklet av Microsoft. Da dette ble lansert i 1996 var det initielt myntet på web-utviklere, men ble senere utvidet til administrasjon av Windows-systemer. Før dette var det batch, som stammer fra DOS og OS/2, som ga oss muligheten til å automatisere oppgaver i Windows.

Både VBScript, batch og ulike kommandolinjeverktøy har vi kunnet jobbet med fra den tradisjonelle kommandolinjen i Windows, cmd.exe/command.com.

Dette har ikke vært dårlige løsninger, men problemet for oss som skal ta det i bruk er stor grad av inkonsistens. De fleste produkter har et eller flere kommandolinje-verktøy, tradisjonelt i form av Resource Kits. For disse verktøyene er det ingen definert standard for syntaks og oppbygging. For eksempel kan et verkøy benytte slash (/) for å angi parametre, mens andre kan bruke binde-strek (-).

Før vi går inn på oppbygging i PowerShell, skal vi se litt på .NET og historien til selve PowerShell.

Microsoft .NET Framwork er et rammeverk for software på Windows operativsystemer. Den første versjonen ble lansert i 2002, og vi har per i dag kommet til versjon 4.0. .NET erstatter i stor grad COM, og de fleste nye applikasjoner for Windows skrives i dag i .NET.

Microsoft har lenge vært klar over Windows sine begrensninger i forhold til kommandolinjen og automatisering. De begynte å se på dette i år 2000, og det ble da etablert et prosjekt for dette. Parallelt jobbet mannen som er arkitekten bak PowerShell, Jeffrey Snover, på WMI teamet i Microsoft. Han hadde noen tanker om hvordan WMI kunne tilgjengeliggjøres på en mer administrator-vennlig måte i et objekt-orientert shell basert på .NET. Under “Ressurser” nederst i denne artikkelen er det en link til “Monad Manifesto – the Origin of Windows PowerShell”. Monad var kode-navnet for PowerShell, og Monad Manifesto beskriver Jeffrey Snover`s visjon for en ny plattform for administrasjon og automatisering i Windows.

Den første offentlige beta-versjonen av PowerShell ble lansert i Juni 2005, mens det endelige produktet Windows PowerShell 1.0 ble lansert i November 2006. Den nyeste versjonen er versjon 2.0, som ble lansert som en del av Windows 7 og Windows Server 2008 R2 i August 2009. Fra og med versjon 2.0 er PowerShell en integrert del av Windows operativsystemet, og den siste versjonen er tilgjengelig som en nedlasting til Windows XP/Vista og Windows Server 2003/2008 R1.

Microsoft har et program som heter Microsoft Common Engineering Criteria for Windows Servers (CEC), som definerer felles krav for alle server-produkter fra Microsoft. Fra og med 2009 ble Windows PowerShell en del av CEC, noe som betyr at alle Microsoft server-produkter heretter skal ha støtte for automatisering via PowerShell.

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:

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:

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

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å.

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.

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:

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

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

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:

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.

Stadig flere 3. parter har kommet med PowerShell-integrasjoner i sine løsninger, blant disse kan Amazon S3, Citrix XenApp 6, Compellent, Intel, NetApp Data ONTAP, Quest, Symantec Enterprise Vault og VMware vSphere nevnes.

Page 1 of 212