$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`
}
Asked
Active
Viewed 1,022 times
0

Guenther Schmitz
- 1,955
- 1
- 9
- 23

Kavya
- 11
- 2
-
I don't get any output from d above code sniplet – Kavya Sep 19 '20 at 05:02
-
Does this answer your question? [How to convert value to KB, MB, or GB depending on digit placeholders?](https://stackoverflow.com/a/57535324/1701026): **`Format-ByteSize 79410065774139`** **`72.2 TB`** – iRon Sep 19 '20 at 14:21
2 Answers
3
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

Doug Maurer
- 8,090
- 3
- 12
- 13
-
I get this error 95441989544198954 89544198954419895441989544198954419895441989544198954" to type "System.Int32". Error: "Value was either too large or too small for an Int32." At C:\Program Files\Zabbix Agent\scripts\try.ps1:8 char:1 + $numberInGigabytes = $numberInBytes / 1GB + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger PS C:\Program Files\Zabbix Agent\scripts> – Kavya Sep 19 '20 at 07:09
-
$nametask = Get-NetBackupJob -JobId "96953" $number = $nametask.kbytes $bytes= $number * 1024 Function Get-FriendlySize { Param($bytes) switch($bytes){ {$inbytes -gt 1TB}{"{0:N2} GB" -f ($inbytes / 1TB);break} {$inbytes -gt 1GB}{"{0:N2} GB" -f ($inbytes / 1GB);break} {$inbytes -gt 1MB}{"{0:N2} MB" -f ($inbytes / 1MB);break} {$inbytes -gt 1KB}{"{0:N2} KB" -f ($inbytes / 1KB);break} default {"{0:N2} Bytes" -f $inbytes} } } – Kavya Sep 19 '20 at 07:39
-
these are my commands which get the ouput in the variable number which has data in KB $nametask = Get-NetBackupJob -JobId "96953" $number = $nametask.kbytes – Kavya Sep 19 '20 at 07:40
-
-
Please take a look at the edit. If it answers your question please don't forget to mark it as such. – Doug Maurer Sep 20 '20 at 07:10
-
`$nametask = Get-NetBackupJob -JobId "96953" $number = $nametask.kbytes $bytes= $number * 1024 Function Get-FriendlySize { Param([bigint]$bytes) switch($bytes){ {$new -gt 1PB}{"{0:N2} PB" -f ($new / 1PB);break} {$new -gt 1TB}{"{0:N2} TB" -f ($new / 1TB);break} {$new -gt 1GB}{"{0:N2} GB" -f ($new / 1GB);break} {$new -gt 1MB}{"{0:N2} MB" -f ($new / 1MB);break} {$new -gt 1KB}{"{0:N2} KB" -f ($new / 1KB);break} default {"{0:N2} Bytes" -f $new} } }` I dont get any result is my syntax right? – Kavya Sep 20 '20 at 10:53
-
You changed the function, why? This has broken the function as `$new` is unknown. All you have to do is call `Get-FriendlySize $number` and don't change the function. – Doug Maurer Sep 20 '20 at 18:25
1
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`
}

Guenther Schmitz
- 1,955
- 1
- 9
- 23
-
I get this error 95441989544198954 89544198954419895441989544198954419895441989544198954" to type "System.Int32". Error: "Value was either too large or too small for an Int32." At C:\Program Files\Zabbix Agent\scripts\try.ps1:8 char:1 + $numberInGigabytes = $numberInBytes / 1GB + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger PS C:\Program Files\Zabbix Agent\scripts> – Kavya Sep 19 '20 at 07:17