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

No comments yet.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

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

× Close