Hjälpsystem

CmdLets är inbyggda kommandon i PowerShell. Dessa kommando definieras som klasser i .NET Framework. Dessa klasser formateras som moduler vilka laddas automatiskt när PowerShell startas.

Bild 1: PowerShell Moduler

Cmdlets hanterar, förutom filsystemet, även variabler och miljövariabler, certifikat, alias, funktioner och registret. Dessa resurser tillhandahålls av ”Providers” för administrativa hanteringar.

Syntax

PowerShell kommando, eller CMDLETS, är uppbygt i två delar som separeras från varandra med ett bindestreck. Den första delen är ett verb och den andra ett substantiv exempelvis Get-ChildItem (Get är verb och ChildItem är substantiv)

Bild 2: PowerShell kommando-syntax

Uppbyggande i VERB-SUBSTANTIV har för syfte att man lär sig CMDLETS genom att tänka först på handlingen och därefter på vad som påverkas av handlingen. Till exempel GET indikerar att det ska hämtas något, och CHILDITEM indikerar att det något (ITEM) som ska hämtas är under en behållare. Det är precis det som händer när man exekverar följande kommando:

PS C:\>Get-ChildItem c:\Windows

Den första delen är inte alltid VERB men ändå associeras med någon handling eller åtgärd.  Direkt efter kommandot kan anges en eller flera parametrar som finjusterar kommandoexekveringen. Argument associeras med den andra delen i ett CMDLET, exempelvis CHILDITEM med c:\Windows.

PowerShell är inte case-sensitive. Det innebär att det går att skriva med små eller stora bokstäver, men alltid enligt syntaxen. Varje gång du anger något CMDLET ska du skriva korrekt annars fungerar det inte, exempelvis om du skriver:

  • Get ChildItem
  • GetChildItem
  • get=childitem
  • get_childitem

OBS: Man behöver inte kunna hela kommandot när det finns flera alias, exempelvis gci istället Get-ChildItem.

De flesta CmdLets innehåller parametrar, som alltid föregås med minus och kan kräva ett kompletterande värde. Parametrar förser CmdLets med ytterligare exekveringsinformation och regler. Parametrar kan skilja sig lite olika beroende på vilket CmdLet vi använder oss av. Vissa parametrar är obligatoriska och direkt associerade med ett visst kommando, andra är ytterligare alternativ för att finjustera kommandoexekveringen.

För att ta reda på vilka parametrar ett CmdLet innehåller kan vi använda oss av Get-Help med parametern -Parameter för att få ut informationen.

PS C:\>Get-Help Get-ChildItem -Parameter  *

Utdata: Attributes, Depth, Directory, Exclude, File, Filter, Force, Hidden, Include, LiteralPath, Name, Path, ReadOnly, Recurse, System, mm.

Parameter  -Path

Parametern path låter oss specificera sökvägen till det item som skall bearbetas av CmdLets. Path tar ett strängvärde (text) som indata. Det är tillåtet att använda ett eller flera värden samt wildcards.

För att få fram items i c:\Program Files kan vi exekvera:
PS C:>Get-ChildItem -path ”C:\Program Files”
Eftersom parametern path är en standardparameter behöver vi inte ange den, det räcker att skriva:
PS C:\>Get-ChildItem ”C:\Program Files”
Vill vi istället se resultatet av två olika sökvägar kan vi använda kommatecken för att separera dessa:
PS C:\>Get-ChildItem -path ”C:\Program Files”,”C:\Windows\System32”
Vi får även använda wildcards som indata. Säg att vi exempelvis vill returnera alla Microsoft Management Console filer från C:\Windows\System32 på en Windows dator.
PS C:\>Get-ChildItem -path ”C:\Windows\System32\*.msc”
Om vi endast vill få fram de Microsoft Management Console filer som börjar på bokstäver a till m kan vi utöka vår wildcardsökning med ytterligare funktionalitet genom att skriva [a-m].
PS C:\>Get-ChildItem -path ”C:\Windows\System32\[a-m]*.msc”

Bild 3: CMDLET Get-ChildItem

Parameter  -Include

Parametern include returnerar endast information om ett specificerat objekt. Kommandon nedan testades på en Windows 10.

Vi får använda wildcards (*), men parametern include fungerar endast om parametern path visar samtliga items. För att få fram endast filen compmgmt.msc exekvera:
PS C:\>Get-ChildItem  -path ”C:\Windows\System32\*”  -include compmgmt.msc
För att få fram samtliga filer med ändelsen msc kan vi exekvera:
PS C:\>Get-ChildItem  -path ”C:\Windows\System32\*”  -include *.msc

Parameter  -Exclude

Parametern exclude returnerar allting utom det som exkluderas.

För att få fram alla filer med namn som börjar med a och b i katalogen c:\Windows\System32 men inte filer som slutar på .msc, exekvera:
PS C:\>Get-ChildItem  -path ”C:\Windows\System32\[a-b]*”  -exclude  *.msc
Det går väl att kombinera include och exclude. Kommandot nedan listar ut alla filer i katalogen C:\Windows\System32, sorterar bort alla filer som slutar i dll och returnerar endast filen cmpmgmt.msc
PS C:\>Get-ChildItem  -path C:\Windows\System32\*  -exclude *.dll  -include compmgmt.msc

Parameter  -Filter

Parametern filter kan vid första anblick tolkas likadant som include och exclude. Skillnaden är att parametern filter använder sig av en specifik format från en specifik provider. Det här innebär att hela kommandot kommer att variera beroende på vilket provider används. Förenklat kan man säga att parameter FILTER sortera utdata genom att filtrera specifika resultat.

OBS: Parametern FILTER kommer vi att använda ofta vid hantering av AD-objekt.

För att få fram alla filer med ändelsen msc i C:\Windows\System32 kan vi exekvera:
PS C:\>Get-ChildItem C:\Windows\System32  -filter  *.msc

Parameter  -Name

Parametern name returnerar endast namnet på det item vi vill hämta. Använder vi parametern name i en pipeline kan det vara bra att veta att från mängder information av ett objekt endast namnet skickas vidare till nästa kommando i pipeline.

 För att få fram endast filer med namn som innehåller xml och ändelsen dll kan vi exekvera:
 PS C:\>Get-ChildItem -path ”C:\Windows\System32″ –name  *xml*.dll
 För att få namn på tjänster som är igång och börjar med bokstaven s exekvera:
 PS C:\>Get-Service –name  *s

Parameter  -Recurse

Parametern recurse är en switch-parameter. En switch-parameter tar inga argument utan behöver endast skrivas ut för att användas. Parametern recurse returnerar alla items från en specifik plats samt alla underliggande platser. Det kan tolkas som ett sätt att tvinga en viss resultat. Till exempel om vi exekverar följande: PS C:\>Get-ChildItem -path ”C:\Program Files” tar vi fram endast kataloger men inte deras innehåll.

För att få fram kataloger och deras innehåll exekvera:
PS C:\>Get-ChildItem -path ”C:\Program Files” –recurse
För att få fram samtliga nycklar och underliggande nycklar från en viss plats i registret kan vi exekvera:
PS C:\>Get-ChildItem –path ”HKLM:\SOFTWARE\” –recurse

Parameter  -Force

Parametern force är också en switch-parameter. Parametern force tvingar igenom sökningen och överskrider restriktioner, men den kan inte överskrida säkerhetsinställningar på objekt.

För att få fram mappar och filer i c: kan vi exekvera (visas inte allt innehåll):
PS C:\>Get-ChildItem
För att få fram samtliga filer, inklusive gömda filer, kan vi exekvera:
PS C:\>Get-ChildItem –force

Parameter  -LiteralPath

Parametern literalPath behandlar en eller flera specifika sökvägar. Skillnaden från parametern path är att wildcards inte accepteras. Se kommandoutförande som demonstrerar skillnaden.

Första kommandot returnerar alla items från C:\Program Files.
PS C:\>Get-ChildItem -Path  ”C:\Program *iles\*”
Skriver vi samma kommando men använder parametern literalPath får vi fram ett felmeddelande eftersom parametern inte accepterar wildcards.
PS C:\>Get-ChildItem -literalPath  ”C:\Program *iles\*”

Gemensamma parametrar

Utöver standardparametrar finns det ett antal gemensamma parametrar som alla CmdLets stödjer:
Verbose, Debug, WarningActivation, WarningVariable, ErrorAction, ErrorVariable, OutVariable, OutBuffer. Men också WhatIf.

WhatIf

Parametern whatif beskriver vad som skulle hända om vi exekverar ett kommando. Notera att kommandot inte utförs utan det endast testats och det berättar för oss effekten av att utföra kommandot.

För att få information om de möjliga effekten av exekvering av ett CmdLet exekvera:
PS C:\>Remove-Item C:\Windows\System32\compmgmt.msc  –WhatIf

Hjälpsystem

När man lär sig PowerShell kommer man att behöva hjälp för att få information om hur kommandona används. PowerShell ger även praktiska exempel. Först ska vi uppdatera hjälp-systemet med kommandot Update-Help

Bild 4: Uppdatera help i PowerShell

Med ett uppdaterat hjälpsystem kan vi börja att använda det kommandot Get-Help eller bara help. Exekvering av kommandot Get-Help -? ger information kortfattat i en sida, medan kommandot Help ger information i flera sidor.

Så här kan hjälp tas fram:
PS C:\>Get-Help
eller
PS C:\>help

Exempel:

För att få fram information om Get-ChildItem kan vi använda:
PS C:\>Get-Help Get-ChildItem
eller
PS C:\>Help Get-ChildItem
För att få fram den fullständiga hjälptexten om Get-ChildItem kan vi använda:
PS C:\>Get-Help Get-ChildItem -full
För att få fram detaljerad information om Get-ChildItem exekvera:
PS C:\>Get-Help Get-ChildItem  -detailed
För att få fram hjälp om parametrar för Get-ChildItem exekvera:
PS C:\>Get-Help Get-ChildItem  -parameter *
För att få fram hjälp/information och exempel om Get-PSProviders exekvera:
PS C:\>Get-Help Get-PSDrive  -examples
För att få fram exempel om Get-PSProviders exekvera:
PS C:\>Get-Help Get-PSProviders  -examples
För att få fram hjälp/information om Get-Process exekvera:
PS C:\>Get-Help Get-Process
För att få fram hjälp/information om CmdLet Get-PSdrive exekvera:
PS C:\>Get-Help Get-Psdrive
eller
PS C:\>help Get-Psdrive
eller
PS C:\>help get-psd*