You can specify the type of a variable before it to force its type. It’s called (dynamic) casting (more information is here):
$string = "1654" $integer = [int]$string $string + 1 # Outputs 16541 $integer + 1 # Outputs 1655
As an example, the following snippet adds, to each object in $fileList
, an IntVal
property with the integer value of the Name
property, then sorts $fileList
on this new property (the default is ascending), takes the last (highest IntVal
) object’s IntVal
value, increments it and finally creates a folder named after it:
# For testing purposes #$fileList = @([PSCustomObject]@{ Name = "11" }, [PSCustomObject]@{ Name = "2" }, [PSCustomObject]@{ Name = "1" }) # OR #$fileList = New-Object -TypeName System.Collections.ArrayList #$fileList.AddRange(@([PSCustomObject]@{ Name = "11" }, [PSCustomObject]@{ Name = "2" }, [PSCustomObject]@{ Name = "1" })) | Out-Null $highest = $fileList | Select-Object *, @{ n = "IntVal"; e = { [int]($_.Name) } } | Sort-Object IntVal | Select-Object -Last 1 $newName = $highest.IntVal + 1 New-Item $newName -ItemType Directory
Sort-Object IntVal
is not needed so you can remove it if you prefer.
[int]::MaxValue = 2147483647
so you need to use the [long]
type beyond this value ([long]::MaxValue = 9223372036854775807
).