PowerShell is a powerful scripting language used for automating administrative tasks and processing data. A common task when working with data in PowerShell is converting between different data types like strings and integers.
In this comprehensive guide, you will learn multiple methods to convert a string to an integer in PowerShell.
Why Convert a String to an Integer?
Here are some reasons you may need to convert a string to an integer in PowerShell:
- You have loaded string data from a file or API that you want to perform math on
- You need to pass integer values to a command or function that requires ints
- You want to compare string values numerically instead of alphabetically
- You need to manipulate string data as numbers for calculations
For these cases and others, being able to reliably cast from string to integer is important.
Checking the Existing Data Type
Before converting between types, it‘s always a good idea to check the existing data type using PowerShell‘s .GetType()
method.
For example:
$string = "123"
$string.GetType().Name
This returns:
String
And for an integer:
$int = 123
$int.GetType().Name
Which returns:
Int32
Knowing the current type makes it clear whether a conversion is necessary.
Method 1: The -as Operator
The simplest way to convert a string to integer is using PowerShell‘s -as
operator.
The syntax is:
$stringVar = "123"
[int]$integerVar = $stringVar -as [int]
What this does:
- Declares a string variable with the string data
- Uses
-as
to try converting to an integer - Casts this result to
[int]
to guarantee integer type
Let‘s check the data type of the result:
$integerVar.GetType().Name
It correctly shows:
Int32
The -as
operator converts the data if possible, or returns $null
if it fails.
This makes -as
useful for simple string-to-integer conversions but it doesn‘t work in every case. The input string needs to contain a valid integer value.
For example:
$string = "123.45"
[int]$integer = $string -as [int]
Because .45
can‘t be represented as an integer, the conversion fails.
So -as
works great when you know the string contains an integer, but fails silently if not.
Method 2: Using [System.Convert] Directly
For more control, you can call .NET‘s [System.Convert] methods directly. The two that help with string-int conversion are:
- [System.Convert]::ToInt32() – Tries converting a string to a 32-bit integer
- [System.Convert]::ChangeType() – Converts between any .NET types
Here is an example of using [System.Convert]::ToInt32():
$string = "456"
$integer = [System.Convert]::ToInt32($string)
We can pass strings directly into these methods without any intermediate variables.
To handle cases where conversion fails, there is a second parameter to provide a substitute value:
$value = "123.45"
$integer = [System.Convert]::ToInt32($value, -1)
Since "123.45" isn‘t an integer, this will return -1 instead of failing.
The [System.Convert] methods give you great control over handling bad data during conversion.
One downside is needing to remember the method names like ToInt32() instead of using PowerShell‘s built-in cast syntax.
Method 3: Using Try/Catch Blocks
Another approach is to wrap your conversion logic in Try/Catch
blocks to explicitly handle errors.
For example:
Try {
$integer = [int]"789"
} Catch {
$integer = -1
}
This behaves similar to the System.Convert approach:
- Try converting the string using PowerShell cast syntax
[int]
- Catch any conversion errors
- On failure, set a default integer value
The benefit here is sticking with PowerShell‘s native casting while still handling errors robustly.
You can also customize the error handling:
Try {
$integer = [int]$value
} Catch [System.InvalidCastException] {
Write-Warning "Could not cast ‘$value‘ to integer"
$integer = 0
}
This lets you print a warning to help debug why strings fail to convert properly.
Overall Try/Catch provides flexibility while keeping PowerShell-native syntax.
Method 4: Parsing the Whole Number from Strings
One problem not yet covered is handling strings with additional data like:
$value = "1,234 meters"
The -as
operator can‘t extract just the integer part here.
For complex strings like this, use the -replace
operator to parse out just the leading number:
$justNumbers = $value -replace "[^0-9]"
[int]$integer = $justNumbers
Here is what this does:
- Use a regular expression " [^0-9] " to match any character EXCEPT numbers
- Replace the matches with an empty string to delete them
- Cast the remaining numeric substring to integer
Now we can handle strings with additional text or symbols around the number.
-replace
gives us flexibility to handle messier string data during conversion.
Summary of Techniques
This guide covered several methods to safely and robustly convert string data into integers:
- -as – Simple, works if the string contains a valid integer
- System.Convert – Direct .NET conversion methods
- Try/Catch – Wrap casts in exception handling
- -replace – Parse integer substrings from complex strings
Choosing the right approach depends on your data and use case.
But with all these PowerShell conversion techniques, you can now easily "make integers" from strings!