I del 5 av denne artikkel-serien skal vi se på hvordan vi kan utvide funksjonaliteten til PowerShell.
Hvordan utvide funksjonaliteten til Powershell?
Hvilke Powershell cmdlets som finnes i din sesjon avhenger av hvilke moduler og snapins som er lastet inn. Snapins er Powershell 1.0 metoden å laste inn Powershell cmdlets på, og de er fortsatt støttet i Powershell 2.0. Med Powershell 2.0 fikk vi også moduler. Snapins er med andre ord bakoverkompatible med Powershell 1.0, mens moduler kun støttes av Powershell 2.0. Moduler har en stor fordel iforhold til snapins – de kan enkelt kopieres og lastes inn uten krav til at de må installeres.
La oss se på snapins og moduler.
Bruk av snapins i Powershell?
En Powershell snap-in er en .NET assembly (som regel en eller flere dll filer) som inneholder Powershell providere og/eller cmdlets. Det benyttes altså for å utvide funksjonaliteten i Powershell med “native” Powershell kommandoer og funksjonalitet. Powershell kommer en ett sett grunnleggende snap-ins, men mange produkter og tredjeparter har sine egne som du kan laste inn for å få økt funksjonalitet.
Når du legger til en snap-in blir funksjonaliteten lagt til for gjeldende sesjon. Med andre ord forsvinner den når du lukker sesjonen du er i. For å beholde funksjonaliteten mellom sesjoner må du enten velge å laste inn snap-in i profilen din, eller du kan benytte Export-Console til å lagre en fil med de innlastede snapins for senere bruk. Du kan ha flere konsollfiler, som du kan starte opp Powershell med ved behov.
Du benytter kommandoen Get-PSSnapin for å se hvilke utvidelser du har installert.
Det finnes en god del snapins som ble utviklet for bruk med Powershell 1.0, og det er fortsatt enkelte som velger å utvikle snapins for å både støtte Powershell 1.0 og Powershell 2.0.
Før du starter kjører du kommandoen Get-PSSnapin for å se hvilke Snapins som allerede er lastet. Legg merke til hvilke snapings som er lastet, og sammenlign etter at PowerShell Community Extensions er installert.
I bildet over ser du at mye av kjernefunksjonaliteten I Powershell er implementert som snapin. Disse snapins gir altså de cmdlets som finnes i Powershell som standard.
Tips: Du kan se hvilke snapins som er tilgjenglige på din maskin med kommandoen Get-Pssnapin –registered. Ønsker du å ta i bruk en tilgjenglig snapin gjør du dette med kommandoen Add-Pssnapin ”navn på snapin”
Når du har lastet inn en ny Snapin kan du se hvilke kommandoer den har ved å kjøre kommandoen Get-command –module “navn på snapin”
Merk: Selv om det er en snapin vi legger inn som parameter, heter parameteren Module i Get-Command. Om du kjører Powershell 1.0 heter denne parameteren Snapin, og du må da kjøre kommandoen get-command –snapin
Bruk av moduler i Powershell 2.0
Den primære måten å utvide funksjonaliteten i Powershell 2.0 er gjennom bruk av moduler. En modul er en pakke som inneholder Powershell kommandoer, slik som cmdlets, funksjoner, variabler, alias og såkalte providers. Providers gjør det mulig å aksessere datakilder gjennom stasjonsalias. Moduler lar utviklere og administratorer dele opp og organisere Powershell koden i gjenbrukbare, komplette pakker. Kode fra en modul utføres i sin egen kontekst, og affekterer ikke tilstanden utenfor modulen.
Der snapins må installeres (dll basert installasjon) og registreres i registry, kan moduler enkelt kun kopieres inn uten noen form for installasjon. Fordi moduler ikke må installeres, kan man bruke disse uten å være administrator.
Du kan altså benytte både moduler og snapins for å legge til kommandoer i ditt Powershell miljø. Moduler kan legge til alle typer kommandoer, cmdlets, providers, funksjoner, variabler, aliase og stasjoner. Snapins kan kun legge til cmdlets og providers.
Hvis du ønsker å se hvor en cmdlet er definert, kan du utføre følgende kommando:
get-command | format-list -property verb, noun, pssnapin, module
For eksempel, hvis du ønsker å se hvor Get-Process er definert:
get-command get-process | format-list -property verb, noun, pssnapin, module
Moduler kan lastes fra hvor som helst, men det er enklest å benytte erklærte modulområder. Ved å bruke erklærte modulområder er det lettere å oppdage modulene, samt at de kan aktiveres uten at hele stien til modulen må angis. Det er i utgangspunktet to erklærte områder hvor moduler kan ligge:
• %System%WindowsPowershell1.0Modules ($PSHomeModules)
• %Userprofile%DocumentsWindowsPowershellModules
Du kan sjekke hvilke stier som er erklærte modulområder på ditt system ved å kjøre følgende kommando:
$env:psmodulepath
Modulfilene kan kopieres til brukerens modulområde, eller til systemets modulområde. Man kan også laste moduler ved å eksplisitt angi banen til modulen.
For å aktivere modulen bruker man kommandoen Import-Module og modulens navn. Man kan få en oversikt over tilgjenglige moduler ved å bruke kommandoen Get-Module –ListAvailable.
La oss se på hvordan vi installerer en typisk modul vi laster ned fra Internet. I dette eksemplet skal vi laste ned en populær samling med utvidelser til Powershell som heter Powershell Community Extensions fra Codeplex.
Powershell Community Extensions finner du på sidene til Codeplex.
Etter at du har lastet ned zip fila, høyreklikker du på den og velger Properties. Velg deretter Unblock som vist i figuren under:
Dette forteller Windows at du er trygg på fila, og at den ikke skal oppføre seg som en “remote” fil.
En remote fil påvirkes av din ExecutionPolicy, for eksempel om du har ExecutionPolicy satt til RemoteSigned.
Ved å kjøre Unblock vil modulen oppføre seg som en lokal fil, tilsvarende de du selv oppretter.
Pakk deretter ut fila – fortrinnsvis til en av de stedene som er definert som Modul lokasjon. (som angitt i $env:psModulPath tidligere i artikkelen.)
Om du nå kjører kommandoen Get-Module –ListAvailable vil du få opp en oversikt over tilgjenglige moduler. (altså moduler som ligger i $env:psModulPath)
Videre kan vi aktivere denne modulen med Import-Module. Ved å aktivere modulen blir cmdlets og providere som finnes i modulen aktivert i denne sesjonen av Powershell. Merk at om du lukker Powershell vinduet, og starter det på nytt, må modulen importeres på nytt. Om det er moduler du ønsker å alltid laste, kan dette gjøres gjennom Powershell profilen din.
Etter at du har importert modulen vil du gjerne se hva som finnes i den.
Det gjør du gjennom Get-Command –Module som i vist i eksemplet under:
I denne artikkelen har vi sett på hvordan du kan utvide funksjonaliteten i Powershell med moduler og snapins.

Sender din rapport, vennligst vent...