Providers

De flesta datorsystem lagrar och hanterar data många gånger i en struktur liksom ett filsystem. På grund av den stora mängden av data som lagras i dessa strukturer kan det vara komplicerat att komma åt, hitta och hantera en specifik del av data.

Bild 1: Datastruktur med PowerShell

Windows PowerShell tillhandahåller lämpliga gränssnitt som tillåter åtkomst till databaser och underlättar hantering av den stora datamängden. Dessa lämpliga gränssnitt är en sammansättning av avancerade datahanterare som kallas ”leverantörer” eller PROVIDERS.

PowerShell Providers tillåter oss komma åt lagrade data via specifika enheter, på engelska DRIVES.

Bild 2: PowerShell enheter

Med kommandot Get-PSProvider | Format-table tas fram leverantörer och dess enheter. Observera att utdata har formaterats i en komprimerad tabell.

  • Registry – tillhandahålls som enheter HKLM: och HKCU:
  • Alias – tillhandahålls som enhet Alias:
  • Environment – tillhandahålls som enhet Env:
  • FileSystem – tillhandahålls som enhet C:, D:, E:
  • Function – tillhandahålls som enhet Function:
  • Variable – tillhandahålls som enhet Variable:

OBS: För att komma åt enheterna läggs till ett kolon 

Mer om Providers:

För att få fram PowerShell PROVIDERS i en justerad tabell exekvera:
PS C:>Get-PSProvider | format-table  -a
För att få fram PowerShell enheter -DRIVES- exekvera:
PS C:\>Get-PSDrives

Nu när vi vet vilka leverantörer presenterar data via olika enheter kan vi börja att se vad dessa enheter innehåller:

För att förflytta oss mellan olika enheter/drives, exempelvis till registret, kan vi använda oss av DOS kommandot CD. Det är egentligen en alias till PowerShell CMDLET Set-Location:
PS C:\>cd hklm:
eller
PS C:\>Set-Location hklm:
Åtkomst till registret är begränsat och när man vill ta fram innehållet visas endast en del och inte allt. Till exempel kontodatabasen SAM. Det genereras också olika fel-meddelande i rött färg när åtkomsten nekas. För att ta fram HKLM innehållet exekvera:
PS HKLM:\>Get-ChildItem
För att förflytta oss till HKLM\SAM exekvera:
PS HKLM:\>Set-Location SAM
text….
PS C:\>Get-ChildItem -path ”C:\Windows\System32\*.msc”
text….
PS C:\>Get-ChildItem -path ”C:\Windows\System32\[a-m]*.msc”

PowerShell Enheter – Drives

Varje provider har egna enheter (drives). För att få fram en lista på samtliga drives kan vi använda:
PS C:\>Get-PSDrive

Bild 3: PowerShell tillhandahållare och enheter
  • Första kolumnen visar namn på enheterna och på fjärde Providers.
  • Observera att vissa enheter har samma namn som sin leverantör (Provider).
  • Provider Filsystem tillhandahåller enheter C, D, E
  • Provider WSMan tillhandhåller enheten WSMan, administrativa webbtjänster.

Push-Location och Pop-Location

Varje gång man vill ändra arbetskatalogen behöver man ange sökvägen som argument till ett kommando exempelvis Set-Location. När man därefter vill tillbaka till första arbetskatalogen krävs att PowerShell kommer ihåg det. Med kommandot Push-Location kan lagras den aktuella arbetskatalogen i/på ett stack-minne. Därefter får man använda kommandot Pop-location för att PowerShell använder sökvägen i stack-minnet.

För att ändra arbetskatalogen C:\Windows\System32\ till HKLM\Software\Microsoft och därefter ändra tillbaka till C:\Windows\System32 exekvera:
PS C:\Windows\System32> Push-Location HKLM:
PS HKLM:\>Set-Location .\Software
PS HKLM:\>Software> Set-Location .\Microsoft
PS HKLM:\>Software\Microsoft> Pop-Location
PS C:\Windows\System32>
  • Kommandot Push-Location lagrar sökvägen för den aktuella arbetskatalogen, C:\Windows\System32\
  • Kommandot Pop-Location läser av sökvägen i stack-minnet.

Enheten Alias:

Leverantören ALIAS tillhandahåller enheten ALIAS. Många PowerShell kommando har en alias, ett namn till oftast förkortat eller förenklat.

För att se innehållet i enheten alias: exekvera:
PS C:\>Get-ChildIten alias:
För att få CMDLET med alias dir exekvera:
PS C:\>Get-Alias  -name  dir
För att få fram alla alias ett cmdlet har, exempelvis Get-ChildItem, exekvera:
PS C:\>Get-Alias  -Definition  Get-ChildItem
Ett enklare sätt att ta fram alias till ett cmdlet kan exekveras så här:
PS C:\>$alias:dir
Ett mer avancerade sätt att ta fram alias till ett cmdlet kan exekveras så här:
PS C:\>Get-Alias | Where-Object {$_.Definition -eq ”Get-ChildItem”}
eller
PS C:\>Dir alias: | Out-String -Stream | Select-String ”Get-ChildItem”

Egna alias

Om man vill skapa ett eget alias kan kommandona Set-Alias eller New-Alias användas. Skillnaden mellan Set-Alias och New-Alias är att New-Alias endast skapar upp nya alias medans Set-Alias kan antingen skapa eller förändra ett befintligt alias.

För att skapa en egen alias med namn np till programmet notepad.exe exekvera :
PS C:\>New-Alias  np  c:\Windows\notepad.exe
I fall man vill kan en alias raderas genom att exekvera:
PS C:\>del alias:np

När man startar PowerShell, en ny session startas. Alias som skapas direkt vid kommandoprompten finns bara kvar så länge PowerShell-konsolen eller sessionen är igång. Stänger vi PowerShell kommer våra egendefinierade alias att försvinna. Alias kan göras permanent ifall man skapar användarprofil (tas inte upp i denna kurs).

Providers – filsystem

Windows filsystemet organiseras kring tre huvudtyper av objekt: enheter, kataloger och filer. Enheterna placeras högst upp i den hierarkiska strukturen, därefter kataloger som innehåller filer. Enheter, kataloger och filer känner vi igen från filsystemet själv, men i PowerShell är filsystemet en Provider som tillhandahåller enheter. I PowerShell är kataloger och filer objekt med namn, egenskaper och metoder. Ett annat namn för kataloger och filer är ITEMS.

Bild 4: PowerShell filsystem
  • Set-Location ändrar arbetskatalogen från c:\ till c:\Windows\System32\
  • För att komma tillbaka till samma plats läggs arbetskatalogen c:\Windows\System32\ till stack-minnet med kommandot Push-Location. Samtidigt ändrar enheten från c: till hklm:
  • För att komma tillbaka till c: utan att behöva ange sökvägen exekveras kommandot Pop-Location
  • Från c:\Windows\System32\ tar vi oss till katalogen WindowsPowerShell\ med kommandot Set-location
  • Där tar vi fram innehållet med ett alias till Get-ChildItem, gci, och upptäcker att det finns en underkatalog som insinuerar att PowerShell versionen är 1.0
  • Med kommandot Get-Host tar vi fram information om PowerShell, bland annat versionen. Versionen är faktiskt 5.1 men katalogen där lagras PowerShell har för namn v1.0

Katalogstruktur för laborationer

I denna kurs ska vi lära oss grundläggande PowerShell kommando så att vi kan administrera en servermiljö. Vi börjar med att skapa en katalogstruktur där vi ska lagra olika script:

För att skapa katalogen c:\VMshares\PS exekvera:
PS C:\>New-Item  c:\VMshares\PS  -type  directory
Kommandot New-Item är kapabel att skapa olika objekt och inte bara kataloger. Med ett värde till parameter  -Type kan specificeras objektet man vill skapa exempelvis  -type file. Man kan också använda kommandot MKDIR PS och ingenting mer. Kommandot MKDIR är egentligen en funktion som kompletterar argument eller värde som specificerar objektet.
För att skapa katalogen c:\VMshares\PS\Scripts exekvera:
PS C:\>New-Item  c:\VMshares\PS\Scripts  -type  directory
För att skapa en tomt textfil i katalogen c:\VMshares\PS\Scripts\ exekvera:
PS C:\>New-Item  c:\VMshares\PS\Scripts\CMDLETs.txt  -type  file
För att öppna filen CMDLETs.txt med NOTEPAD och skriva en kort beskrivning på katalogstrukturen exekvera:
PS C:\>notepad  c:\VMshares\PS\Scripts\CMDLETs.txt
För att läsa raden i textfilen CMDLETs.txt exekvera:
PS C:\>Get-Content  c:\VMshares\PS\Scripts\CMDLETs.txt

Skapa en enhet för filsystem tillhandahållare (Provider):

PS C:\>New-PSDrive  -name Pow FileSystem -Root C:\VMshares\PS\Scripts
PS C:\> cd pow
PS Pow:\>
PS Pow:\>Get-PSDrive