Ok, soy principiante - y estoy perdido con esto:
Tengo un Array donde se capturan algunos datos de la unidad de WMI:
$drivedata = $Drives | select @{Name="Kapazität(GB)";Expression={$_.Kapazität}}
El Array tiene estos valores (2 unidades):
@{Kapazität(GB)=1.500} @{Kapazität(GB)=1.500}
y sólo quiero convertir el 1.500 en un número 1500
He intentado diferentes sugerencias que he encontrado aquí, pero no he podido conseguir que funcione:
-Reemplazar "."," y [int]
no'funciona.
No estoy seguro de si regex sería correcto y cómo hacer esto.
Por la ayuda muchas gracias de antemano.
Simplemente convertir la cadena en un int
no funcionará de forma fiable. Tienes que convertirla en un int32
. Para ello puedes utilizar la clase convert
de .NET y su método ToInt32
. El método requiere una cadena
($strNum
) como entrada principal, y el número base
(10
) para el sistema numérico a convertir. Esto se debe a que no sólo se puede convertir al sistema decimal (el número base 10
), sino también, por ejemplo, al sistema binario (base 2).
Prueba este método:
[string]$strNum = "1.500"
[int]$intNum = [convert]::ToInt32($strNum, 10)
$intNum
Dado que este tema nunca recibió una solución verificada, puedo ofrecer una solución sencilla a los dos problemas para los que veo que pediste soluciones.
La clase string ofrece un método de reemplazo para el objeto string que quieres actualizar:
Ejemplo:
$myString = $myString.replace(".","")
La clase system.int32 (o simplemente [int] en powershell) tiene un método disponible llamado "TryParse" que no sólo devolverá un booleano indicando si la cadena es un entero, sino que también devolverá el valor del entero en una variable existente por referencia si devuelve true.
Ejemplo:
[string]$convertedInt = "1500"
[int]$returnedInt = 0
[bool]$result = [int]::TryParse($convertedInt, [ref]$returnedInt)
Espero que esto resuelva el problema que planteaste inicialmente en tu pregunta.