Get-Command

PowerShell kommandona är egentligen små program grupperade i fyra typer:

  • CMDLET (Ligthweight Command)
  • Funktioner
  • Script
  • Exekverbara program (applikationer)

För att få börja känna CMDLET och funktioner behöver man information om hur CMDLET fungerar. Till detta använder vi kommandot Get-Command som är den mest kraftfulla av alla CmdLet. Kommandot tillhandahåller detaljerat information om hur CmdLet fungerar.

För att se tillgängliga PowerShell kommando i den aktuella sessionen exekvera:
PS C:\>Get-Command
eller
PS C:\>Get-Command  *
För att få fram information om funktioner exekvera:
PS C:\>Get-Command  -CommandType  Function
För att få fram information om CMDLET exekvera:
PS C:\>Get-Command  -CommandType  cmdlet
För att få fram alla CmdLets som börjar på Get exekvera:
PS C:\>Get-Command Get*

Som jag sa  innan består alla cmdlets av ett verb och ett noun. Med Get-Command är det möjligt att få fram information om något kommando genom att använda dessa två delar.

För att få fram alla cmdlets som har verbet GET exekvera:
PS C:\>Get-Command  -verb  get
För att få fram kommandot med vilket kan tjänster startas exekvera:
PS C:\>Get-Command  -verb  start
För att få fram kommandot med vilket kan tjänster stoppas exekvera:
PS C:\>Get-Command  -verb  stop
För att få fram cmdlet som hanterar någon tjänst (service) exekvera:
PS C:\>Get-Command  -Noun  service
För att få fram cmdlet som hanterar alias exekvera:
PS C:\>Get-Command  -Noun  alias
För att få fram cmdlet som hanterar processer exekvera gcm alias till Get-Command:
PS C:\>gcm  -Noun  process
För att få en lista på endast cmdlet som hanterar tjänster exekvera:
PS C:\>gcm *service*  -ComandType  cmdlet

Ett annat namn till objekt är ITEM. För att ta fram CMDLET som hanterar ITEM exekvera:

Bild 1: Get-Command -noun Item

Get-Member

I PowerShell kan objekt hanteras med CmdLets i kombination med deras egenskaper och metoder. Dessa egenskaper och metoder är komponenter av ett objekt, på engelska ”members”. Därmed cmdlet Get-Member ger oss möjlighet att ta fram ett objekts egenskaper och metoder.

Bild 2: Egenskaper och metoder

Egenskaper

För att få fram egenskaper för cmdlet Get-Date kan vi exekvera:
PS C:\> Get-Date | Get-Member  -MemberType  Properties
För att returnera veckodagen kan vi exekvera:
PS C:\> (Get-Date).DayOfWeek
För att få fram aktuell månad i året exekvera:
PS C:\> (Get-Date).Month
Bild 3: Get-Date och dess egenskaper
  • Dagen i veckan fås fram via egenskapen System.DayOfWeek
  • Månaden fås fram via egenskapen System.DateTime

Metoder

För att få fram tjänster i systemet exekvera:
PS C:>Get-Service
Resultatet visar några kolumner som Status, Name och DisplayName. Status anger om tjänsten är igång eller inte. I informationen framgår inte hur tjänster kan hanteras exempelvis starta eller stoppa. Med hjälp av Get-Member kan vi ta fram metoder.
För att få fram hur tjänster kan hanteras exekvera:
PS C:>Get-Service | Get-Member  -MemberType  method
Bild 4: Get-Service och dess metoder
  • I första kommunen presenteras olika metoder för att hantera tjänster.
  • Metoderna definieras som void, System, int, type o.s.v.
  • Void är en datatyp som inkluderas i hantering av ett objekt. Objekthanterings  resultat visas inte.

Kan objektens egenskaper ändras?

Vissa egenskaper kan vi ändra antingen tillfälligt eller permanent. För att undersöka vilka egenskaper vi kan ändra använder vi oss av variabeln $HOST. Denna variabel visar information om PowerShell och dess konsolinställningar (System. Management. Automation. Internal. Host. InternalHost). Förenklat kan man säga att variabeln $HOST innehåller information på den aktuella konsolen.

Bild 5: Variabel $HOST
  • UI eller User Interface styrs av System.Management.Automation.Internal.Host.
  • CurrentCulture är svensk (Nationella inställningar)
  • CurrentUICulture är också svensk (konsolinställningar)
För att få fram egenskaper som styr konsolens utseende kan vi exekvera:
PS C:\> $HOST.UI.RawUI
Notera att kommandot består av några delar som separeras med punkter. Dessa punkter indikerar att delarna är en uppsättning av egenskaper.
För att få fram egenskaperna som går att förändra kan vi exekvera:
PS C:\> $HOST.UI.RawUI | Get-Member -MemberType Property
För att ändra backgrunds färg kan exekveras:
PS C:\> (Get-Host).UI.RawUI.BackgroundColor = ”black”
För att ändra text färg kan exekveras:
PS C:\> (Get-Host).UI.RawUI.ForegroundColor = ”green”
Om det visar ingen ändring kör clear eller: PS C:\> Clear-Host
För att ändra titeln för ett Windows fönster kan vi exekvera:
PS C:\> $HOST.UI.RawUI.WindowTitle = “Gonzalos PowerShell”

Indata

Indata är vad en användare anger på prompten vid cmdlet exekveringar, antingen numeriska värde eller bokstäver (sträng). Indata kan också hämtas från andra källor exempelvis en textfil. Indata är egentligen objekt som har egenskaper och metoder.

Exempel med text indata:

För att se samtliga egenskaper på ett objekt kan vi exekvera:
PS C:\>(”Text eller flera bokstäver klassas som sträng”) | Get-Member -MemberType Property
Första delen av kommandot omringas med parenteser och anges text mellan citationstecken. Det är ett sätt att skicka text till PowerShell. Den andra delen hämtar information om text (sträng) egenskaper. Resultatet visar att strängar har endast längden som egenskap.
För att få fram metoder som hanterar strängar exekvera:
PS C:\>(”Chalo Reyes”) | Get-Member -MemberType Method
För att verifiera om bokstaven i finns i Chalo Reyes exekvera
PS C:\>(”Chalo Reyes”).Contains(”i”)
För att ersätta Reyes med Rejes exekvera:
PS C:\>(”Chalo Reyes”).Replace(”Reyes”,”Rejes”)
Vi skapar en variable $name = ”Chalo Reyes” och därefter klistrar vi in ”El ”
$name = ”Chalo Reyes”
PS C:\>(”$name”).Insert(6,”El ”)
Utdata: Chalo El Reyes
Nu tar vi bort es från Reyes så att vi får Chalo El Rey
PS C:\>(”$name”).Trim(”es”)

Exempel med numeriska indata:

För att få fram vilka metoder finns för numeriska värde exekvera:
PS C:\> 60 | Get-Member -MemberType Method
eller endast
PS C:\> 60 | gm
Flera metoder (CompareTo, Equals, ToDecimal, mm) finns för att hantera numeriska indata, de flesta i klassen System.Int32
För att använda metoden CompareTo() exekvera:
PS C:\> (60).CompareTo(58)
Utdata blir bara en etta vilket betyder att 60 är större än 58.
För att jämföra två lika tal exekvera:
PS C:\> (60).CompareTo(60)
Utdata blir noll vilket betyder att 60 är lika stor som 60.
För att få falsk (false) kan vi exekvera:
PS C:\>(60).Equals(58)
För att få sant(True) kan vi exekvera:
PS C:\> (60).Equals(60)

Utdata

PowerShell innehåller ett antal cmdlet som hjälper att formatera och omdirigera utdata. Med formatera menas att ett objekts egenskaper kan väljas att visas på ett eller annat sätt. Kommando eller cmdlet börjar just med verbet format.

För att få fram vilka CmdLets formaterar utdatan kan vi exekvera:
PS C:> Get-Command Format-* | Select Name
För att få fram PowerShell processer som är igång och bekräfta standard format (tabell) exekvera:
PS C:\> Get-Process -Name PowerShell
För att ta fram PowerShell processer formaterat i en lista exekvera:
PS C:\> Get-Process -Name PowerShell | format-list
För att få fram vissa egenskaper av PowerShell processer exekvera:
PS C:\> Get-Process -Name PowerShell | format-list  -Property  id,fileversion
För att få fram objekt och dess egenskaper i katalogen Program Files kan vi exekvera:
PS C:\> Get-ChildItem -Path ”C:\Program Files\”
För att få fram vissa egenskaper av objekt i katalogen Program Files formaterat som en lista:
PS C:\>Get-ChildItem -Path ”C:\Program Files\” | Format-List -Property Name,Attributes,CreationTime,LastWriteTime
Två processer för PowerShell är aktiva och de fås fram genom att exekvera:
PS C:\> Get-Process -Name PowerShell
Utdatan visas i en tabell (default) med flera kolumner
För att få fram aktiva PowerShell processer formaterat med format-wide exekvera:
PS C:\> Get-Process -Name PowerShell | Format-Wide
Utdatan visar endast en egenskap, processens namn.
För att få fram items i enheten c: (visas i tabell format, flera kolumner) exekvera
PS C:\> Get-ChildItem
För att få fram items i enheten c: formaterat med format-wide exekvera
PS C:\> Get-ChildItem | format-wide
Utdatan visas också i tabell format men annorlunda ändå.
För att få fram samma objekt som ovan men i ett antal kolumner kan vi exekvera:
PS C:\> Get-ChildItem | Format-Wide -col 3
För att specificera en till egenskap kan vi exekvera:
PS C:\>Get-ChildItem | Format-Wide -Property FullName -col 4

Utdata hantering via CMDLET

Utdata kan hanteras på flera olika sätt. Utdata motsvarar på engelska OUT.

För att få fram ett antal olika sätt att hantera utdata exekvera:
PS C:\> Get-Command Out-*
Det visar 7 olika cmdlet: Out-Default, Out-File, Out-GridView, Out-Host, Out-Null, Out-Printer, OUt-String.
Kommandot Out-Default formaterar utdatan precis som Format-Table. För att jämföra utdatahantering av olika cmdlet exekvera
PS C:\>Get-ChildItem
PS C:\>Get-ChildItem | Out-Default
PS C:\>Get-ChildItem | Format-Table
PS C:\>Get-ChildItem | Format-Table | Out-Default
  • I första exemplet använder sig PowerShell av standard utdata-formatering, dvs. tabell.
  • I andra exemplet skickar vi objekt i enheten c: till Out-Default vilket formaterar utdatan i tabell (standard)
  • I tredje exempel skickar vi objekt till Format-Table som egentligen är samma som ovan.
  • I sista exemplet skickas objekt först till Format-Table och sedan vidare till Out-Default, vilket uppnår samma resultat som första exemplet.
Out-File tillåter oss att omdirigera utdata till en fil istället till skärmen. Vi skapar först en katalog i c:\VMshares\PS\Scripts\Temp.
För att skapa katalogen exekvera:
PS C:\> New-Item -ItemType directory -Path c:\VMshares\PS\Scripts\Temp
För att omdirigera utdata, genererade av exekveringen av Get-Process, till filen Processer.txt exekvera:
PS C:\> Get-Process | Out-File C:\VMshares\PS\Scripts\Temp\Processer.txt
För att verifiera att utdatan verkligen finns i textfilen exekvera:
PS C:\> Get-Content  c:\VMshares\PS\Scripts\Temp\Processer.txt
För att försäkra oss om att en fil inte skrivs över med nya uppgifter kan vi exekvera:
PS C:\> Get-Process | Out-File C:\VMshares\PS\Scripts\Temp\Processer.txt  –NoClobber
För att lägga till information i samma textfilen kan vi exekvera:
PS C:\> Get-Process | Out-File C:\VMshares\PS\Scripts\Temp\Processer.txt  -Append
För att räkna antal rader i en befintlig textfil kan vi exekvera:
PS C:\> (Get-Content C:\VMshares\PS\Scripts\Temp\Processer.txt).Length
För att få fram ett mer preciserat antal rader exekvera
PS C:\> Get-Content C:\VMshares\PS\Scripts\Temp\Processer.txt | Measure-Object  -line
För att få fram antal rader, ord och bokstäver exekvera
PS C:\> Get-Content C:\VMshares\PS\Scripts\Temp\Processer.txt | Measure-Obeject  -line  -word  -character