Skapa och formatera beräknade egenskaper i pipelinen

Slutförd

Select-Object kan skapa anpassade eller beräknade egenskaper. Var och en av dessa egenskaper har en etikett, eller ett namn, som Windows PowerShell visar på samma sätt som alla inbyggda egenskapsnamn. Varje beräknad egenskap har också ett uttryck som definierar innehållet i egenskapen. Du skapar varje beräknad egenskap genom att ange värdena i en hash-tabell.

Vad är hash-tabeller?

En hash-tabell är känd i vissa andra programmerings- och skriptspråk som en associativ matris eller ordlista. En hash-tabell kan innehålla flera objekt och varje objekt består av en nyckel och ett värde eller ett namn/värde-par. Windows PowerShell använder hash-tabeller många gånger och i många syften. När du skapar en egen hash-tabell kan du ange dina egna nycklar.

Select-Object hash-tabeller

När du använder en hash-tabell för att skapa beräknade egenskaper med hjälp av Select-Object måste du använda följande nycklar som Windows PowerShell förväntar sig:

  • label, l, name eller n. Detta anger etiketten eller namnet på den beräknade egenskapen. Eftersom gemener l liknar talet 1 i vissa teckensnitt kan du försöka använda antingen namn, n eller etikett.
  • uttryck eller e. Detta anger det uttryck som anger värdet för den beräknade egenskapen.

Det innebär att varje hash-tabell endast innehåller ett namn/värde-par. Du kan dock använda mer än en hash-tabell för att skapa flera beräknade egenskaper.

Anta till exempel att du vill visa en lista över processer som innehåller namn, ID, användning av virtuellt minne och sidminnesanvändning för varje process. Du vill använda kolumnetiketterna VirtualMemory och PagedMemory för de två senaste egenskaperna, och du vill att dessa värden ska visas i byte. Om du vill göra det anger du följande kommando i konsolen och trycker sedan på Retur:

Get-Process |
Select-Object Name,ID,@{n='VirtualMemory';e={$PSItem.VM}},@{n='PagedMemory';e={$PSItem.PM}}

Kommentar

Du kan ange kommandot exakt som det visas och trycka på Retur-tangenten efter det lodräta pipe-tecknet. När du gör det anger du det utökade promptläget. När du har angett resten av kommandot trycker du på Retur på en tom rad för att köra kommandot.

Föregående kommando innehåller två hash-tabeller och var och en skapar en beräknad egenskap. Hash-tabellen kan vara lättare att tolka om du skapar den lite annorlunda, som följande kod visar:

@{
 n='VirtualMemory';
 e={ $PSItem.VM }
 }

I föregående exempel används ett semikolon för att separera de två nyckel/värde-paren , och nycklarna n och e används. Windows PowerShell förväntar sig dessa nycklar. Etiketten (eller namnet) är en sträng och omges därför av enkla citattecken. Windows PowerShell accepterar antingen citattecken (" ") eller enkla citattecken (' ') för detta ändamål. Uttrycket är en liten del av körbar kod som kallas skriptblock och finns inom klammerparenteser ({ }).

Kommentar

$PSItem är en särskild variabel som skapats av Windows PowerShell. Den representerar det objekt som skickas till kommandot Select-Object . I föregående exempel är det ett processobjekt . Med perioden efter $PSItem kan du komma åt en enskild medlem i objektet. I det här exemplet använder en beräknad egenskap egenskapen VM, och den andra använder egenskapen PM.

Kommentar

Windows PowerShell 1.0 och Windows PowerShell 2.0 används $_ i stället $PSItemför . Den äldre syntaxen är kompatibel i Windows PowerShell 3.0 och senare, och många erfarna användare fortsätter att använda den av vana.

Ett kommatecken separerar varje egenskap, till exempel Namn, ID och varje beräknad propert från de andra i listan.

Formatera beräknade egenskaper

Du kanske vill ändra föregående kommando för att visa minnesvärdena i mb. PowerShell förstår förkortningarna KB, MB, GB, TB och PB som representerar kilobyte, megabyte, gigabyte, terabyte respektive petabyte. Därför kan du ändra kommandot på följande sätt:

Get-Process |
Select-Object Name,
              ID,
              @{n='VirtualMemory(MB)';e={$PSItem.VM / 1MB}},
              @{n='PagedMemory(MB)';e={$PSItem.PM / 1MB}}

Förutom den ändrade formatering som gör kommandot enklare att granska ändrar det här exemplet kolumnetiketterna så att de inkluderar MB-beteckningen. Den ändrar också uttrycken så att de inkluderar en divisionsåtgärd och delar varje minnesvärde med 1 MB. De resulterande värdena har dock flera decimaler, vilket är visuellt suboptimalt.

Gör följande för att förbättra utdata:

Get-Process |
Select-Object Name,
              ID,
              @{n='VirtualMemory(MB)';e={'{0:N2}' –f ($PSItem.VM / 1MB) -as [Double] }},
              @{n='PagedMemory(MB)';e={'{0:N2}' –f ($PSItem.PM / 1MB) -as [Double] }}

I det här exemplet används formateringsoperatorn Windows PowerShell -f . När den används med en sträng instruerar formateringsoperatorn -f Windows PowerShell att ersätta en eller flera platshållare i strängen med de angivna värdena som följer operatorn.

I det här exemplet instruerar strängen som föregår operatorn -f Windows PowerShell vilka data som ska visas. Strängen{0:N2} betyder att det första dataobjektet visas som ett tal med två decimaler. Det ursprungliga matematiska uttrycket kommer efter operatorn. Det är inom parenteser för att se till att det körs som en enda enhet. Du kan ange det här kommandot exakt som det visas, trycka på Retur på en tom rad och sedan granska resultatet.

Syntaxen i föregående exempel kan verka förvirrande eftersom den innehåller många skiljetecken. Börja med det grundläggande uttrycket:

'{0:N2}' –f ($PSItem.VM / 1MB)

Föregående uttryck delar den virtuella datorns egenskap med 1 MB och formaterar sedan resultatet som ett tal med upp till två decimaler. Uttrycket placeras sedan i hash-tabellen:

@{n='VirtualMemory(MB)';e={'{0:N2}' –f ($PSItem.VM / 1MB) }}

Den hashtabellen skapar den anpassade egenskapen med namnet VirtualMemory(MB).

Kommentar

Du kan läsa mer om operatorn -f genom att köra Hjälp About_Operators i Windows PowerShell.