Wynik, jaki chcesz! Czyli użycie Calculated Properties

By PowerShell

Niektóre polecenia zwracają obiekty, w których pewne właściwości (np. Get-Item i Length) nie są w intuicyjnej jednostce. Zdecydowanie zamiast (B)ajtów preferuję MB, zamiast milisekund wolę sekundy lub minuty itd.

W takich z pomocą z pomocą przychodzi Calculated Properties z poleceniem Select-Object, umożliwia dodanie do zwracanego obiektu wyliczoną właściwość. Aby to zrobić w parametrze -Property definiujemy hashtable zawierającą odpowiednie pary klucz-wartość.

@{Name='<nazwa>';Expression={<script>}}

Zobacz konkretne przykłady.

Get-ChildItem | Select-Object -Property Name, @{Name='MB';Expression={[int]($_.Length/1mb)}}
 
Get-ChildItem | Select-Object -Property Name, @{N='MB';E={[int]($_.Length/1mb)}}
 
Get-Process | Sort-Object WS -Descending | Select-Object Name, @{N ='WorkingSet(MB)';E = {($_.ws/1MB)}} -First 10

Przy jednym, dwóch prostych wyrażeniach one-liner jest w porządku. Przy większej ilości oraz skomplikowanych taki zapis robi się mało czytelny i trudny do modyfikacji.

Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name'='FreeSpace (GB)'; Expression={[int]($_.FreeSpace / 1GB)}},@{N='FreeSpace (%)';E={[int](($_.FreeSpace/$_.Size)*100)}},@{N="ToAlert";E={if ((($_.FreeSpace / $_.Size) * 100) -le 11) {$true}else {$false}}}
Oneliner

Dlatego w skryptach proponuję wykorzystanie Calculated Properties w takiej formie. Zapis znacznie rozdmuchany, ale od razu widać, o co chodzi.

Calculated Properties w skrypcie PowerShell
$FreeSpaceMB = @{
    'Name' = 'FreeSpace (GB)'
    Expression = { 
        [int]($_.FreeSpace / 1GB)
    }
}
 
$FreeSpacePercent =  @{
    Name = 'FreeSpace (%)'
    Expression= { 
        [int](($_.FreeSpace / $_.Size) * 100)
    }
}
 
$ToAlert = @{
    Name = 'ToAlert'
    Expression = {
        if ((($_.FreeSpace / $_.Size) * 100) -le 11) {
            $true
        }
        else {
            $false
        }
    }
}
 
$SpaceDiskProperties = 'DeviceId', $FreeSpaceMB, $FreeSpacePercent, $ToAlert
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object $SpaceDiskProperties

Photo by Clay Banks on Unsplash

22 Najważniejsze Wskazówki Pisania Skryptów PowerShell

No comments yet.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

× Close