powershellread-host

PowerShell multiplier not recognized using Read-Host


Is there a way to get Read-Host to recognize PowerShell multipliers like KB, MB,GB,TB, and PB? The first example works just fine if I populate the $freespace variable by hand but does not work in the second example using Read-Host to populate the $freespace variable. The has to be a simple solution to get prompt for user input and have the value recognized as an integer rather than a string.

#this works just fine. The PowerShell multiplier GB is recognized if typed in.

$freespace = 6GB

If ($freeSpace -le 5GB) {
    Write-Host “Free disk space is less than 5 GB”
} ElseIf ($freeSpace -le 10GB) {
    Write-Host “Free disk space is less than 10 GB”
} ElseIf ($freeSpace -le 20GB) {
    Write-Host “Free disk space is less than 20 GB”
} Else {
    Write-Host “Free disk space is more than 20 GB”
}

#This does not work. The variable is populated by Read-Host as a [string] 

$freespace = Read-Host -Prompt 'Please enter a value for Freespace'

If ($freeSpace -le 5GB) {
    Write-Host “Free disk space is less than 5 GB”
} ElseIf ($freeSpace -le 10GB) {
    Write-Host “Free disk space is less than 10 GB”
} ElseIf ($freeSpace -le 20GB) {
    Write-Host “Free disk space is less than 20 GB”
} Else {
    Write-Host “Free disk space is more than 20 GB”
}

Solution

  • Correction

    $freeSpace = $null
    do {
     [int]$freeSpaceRaw = Read-Host -Prompt 'Please enter a value for Freespace in GB example 5 for 5GB '
      try { $freeSpace = 0 + $freeSpaceRaw } catch { Write-Warning 'Please enter a valid number.' }
    } while ($null -eq $freeSpace)
    
    If ($freeSpace -lt 5) {
        "Free disk space is less than 5 GB"
    } ElseIf ($freeSpace -lt 10) {
        "Free disk space is less than 10 GB"
    } ElseIf ($freeSpace -lt 20) {
        "Free disk space is less than 20 GB"
    } Else {
        "Free disk space is more than 20 GB"
    }