[powershell] In Powershell what is the idiomatic way of converting a string to an int?

The only method I have found is a direct cast:

> $numberAsString = "10"
> [int]$numberAsString
10

Is this the standard approach in Powershell? Is it expected that a test will be done before to ensure that the conversion will succeed and if so how?

This question is related to powershell

The answer is


$source = "number35"

$number=$null

$result = foreach ($_ in $source.ToCharArray()){$digit="0123456789".IndexOf($\_,0);if($digit -ne -1){$number +=$\_}}[int32]$number

Just feed it digits and it wil convert to an Int32


A quick true/false test of whether it will cast to [int]

[bool]($var -as [int] -is [int])

For me $numberAsString -as [int] of @Shay Levy is the best practice, I also use [type]::Parse(...) or [type]::TryParse(...)

But, depending on what you need you can just put a string containing a number on the right of an arithmetic operator with a int on the left the result will be an Int32:

PS > $b = "10"
PS > $a = 0 + $b
PS > $a.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

You can use Exception (try/parse) to behave in case of Problem


You can use the -as operator. If casting succeed you get back a number:

$numberAsString -as [int]

I'd probably do something like that :

[int]::Parse("35")

But I'm not really a Powershell guy. It uses the static Parse method from System.Int32. It should throw an exception if the string can't be parsed.


Building up on Shavy Levy answer:

[bool]($var -as [int])

Because $null is evaluated to false (in bool), this statement Will give you true or false depending if the casting succeeds or not.