'How to convert the output value stored in variable which is in bytes) into KB MB GB dynamically via powershell script

$nametask = Get-NetBackupJob -JobId "96953"

$number = $nametask.kbytes

if ($number -lt 1KB) {
    return "$number B"
} elseif ($number -lt 1MB) {
    $number = $number / 1KB
    $number = "{0:N2}" -f $number
    return "$number KB"
} elseif ($number -lt 1GB) {
    $number = $number / 1MB
    $number = "{0:N2}" -f $number
    return "$number MB"
} elseif ($number -lt 1TB) {
    $number = $number / 1GB
    $number = "{0:N2}" -f $number
    return "$number GB"
} elseif ($number -lt 1PB) {
    $number = $number / 1TB
    $number = "{0:N2}" -f $number
    return "$number TB"
} else {
    $number = $number / 1PB
    $number = "{0:N2}" -f $number
   return "$number PB"`enter code here`
}


Solution 1:[1]

I use this function

Function Get-FriendlySize {
    Param($bytes)
    switch($bytes){
        {$_ -gt 1TB}{"{0:N2} TB" -f ($_ / 1TB);break}
        {$_ -gt 1GB}{"{0:N2} GB" -f ($_ / 1GB);break}
        {$_ -gt 1MB}{"{0:N2} MB" -f ($_ / 1MB);break}
        {$_ -gt 1KB}{"{0:N2} KB" -f ($_ / 1KB);break}
        default {"{0:N2} Bytes" -f $_}
    }
}

Then just call the function passing the number you'd like to convert

Get-FriendlySize 2255846589
2.10 GB

Get-FriendlySize 79410065774139
72.22 TB

Edit:

The number you showed in your comment is really, really big. For a number that large you can use [bigint]. Here is an updated function that will handle that large of a number.

Function Get-FriendlySize {
    Param([bigint]$bytes)
    switch($bytes){
        {$_ -gt 1PB}{"{0:N2} PB" -f ($_ / 1PB);break}
        {$_ -gt 1TB}{"{0:N2} TB" -f ($_ / 1TB);break}
        {$_ -gt 1GB}{"{0:N2} GB" -f ($_ / 1GB);break}
        {$_ -gt 1MB}{"{0:N2} MB" -f ($_ / 1MB);break}
        {$_ -gt 1KB}{"{0:N2} KB" -f ($_ / 1KB);break}
        default {"{0:N2} Bytes" -f $_}
    }
}

Get-FriendlySize 9544198954419895489544198954419895441989544198954419895441989544198954
8,476,951,544,640,250,324,628,133,400,343,462,843,526,386,001,563,877,376.00 PB

Solution 2:[2]

to convert a number to KB, MB, GB, etc you have to get the base in Bytes. so if the base is KB you

$numberInBytes = $number * 1024

then you can divide it by the desired unit like

$numberInKilobytes = $numberInBytes / 1KB
$numberInMegabytes = $numberInBytes / 1MB
$numberInGigabytes = $numberInBytes / 1GB

adding it to your script like

$nametask = Get-NetBackupJob -JobId "96953"

$number = $nametask.kbytes * 1024

if ($number -lt 1KB) {
    return "$number B"
} elseif ($number -lt 1MB) {
    $number = $number / 1KB
    $number = "{0:N2}" -f $number
    return "$number KB"
} elseif ($number -lt 1GB) {
    $number = $number / 1MB
    $number = "{0:N2}" -f $number
    return "$number MB"
} elseif ($number -lt 1TB) {
    $number = $number / 1GB
    $number = "{0:N2}" -f $number
    return "$number GB"
} elseif ($number -lt 1PB) {
    $number = $number / 1TB
    $number = "{0:N2}" -f $number
    return "$number TB"
} else {
    $number = $number / 1PB
    $number = "{0:N2}" -f $number
   return "$number PB"`enter code here`
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2