'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 |
