Powershell: Sumar un valor a un listado de números en un array
Hoy os presento una solución a un problema númerico que se me ha dado en un script de powershell.
Necesitaba extraer un listado de procesos numéricos de unos nombres de ficheros, pero por diferentes motivos, a la lista de números que yo cargaba en una variable, necesitaba sumarle un número 1.
Vamos que si tengo un valor 8500, necesito para procesarlo, que se convierta en 8501. Y así con todos los números extraídos.
Os enseño el proceso paso a paso. Lo primero cargo los resultados de un listado de ficheros TXT de una carpeta concreta:
1 2 |
# EXTRAER DATOS ORIGEN (MAQUINASX) $fsoDS = Get-ChildItem -Recurse -Path $MAQUINASX -Include *$MACHINESDS*.TXT | Select-Object Name,LastWriteTime | Sort-Object -property lastwritetime -Descending | Where-Object -FilterScript {$_.LastWriteTime -gt (Get-Date).AddDays(-3)} |
La variable tiene este valor:
1 2 3 4 5 6 7 8 9 10 |
PS C:\Users\raul\Documents\PROCESOS> $fsoDS Name LastWriteTime ---- ------------- MM1723008597.TXT 27/06/2023 13:17:03 MM1723008596.TXT 26/06/2023 17:18:00 MM1723008595.TXT 26/06/2023 16:18:55 MM1723008594.TXT 26/06/2023 14:50:56 MM1723008593.TXT 26/06/2023 13:51:59 MM1723008592.TXT 26/06/2023 12:51:48 |
Yo necesito los procesos, que son los últimos cuatro número del nombre. Así que lo limpio con cariño:
1 2 3 4 |
# LIMPIAR LOS DATOS DE ORIGEN (MAQUINASX) $origenDS = $fsoDS.Name.Replace(".TXT", "") # Seleccionamos a partir del caracter 8, 4 caracteres $origenDS = $origenDS.Substring(8,4) |
La variable ahora dispone de estos valores:
1 2 3 4 5 6 7 |
PS C:\Users\raul\Documents\PROCESOS> $origenDS 8596 8595 8594 8593 8592 8591 |
Este listado es texto, y para poder sumarle un número, tendremos que indicarle que es un valor númerico, lo que vamos a tratar. Para eso añadimos [int]
Así que, una vez teniendo claro esto , utilizaremos foreach para tratar valor a valor y $PSItem que representa cada valor del array:
1 |
$origenDS = $origenDS.ForEach({[int]$PSItem + 1}) |
Y volvemos a revisar el resultado de los valores númericos que contiene la variable:
1 2 3 4 5 6 7 |
PS C:\Users\raul\Documents\PROCESOS> $origenDS 8597 8596 8595 8594 8593 8592 |
Ni que decir tiene, que podéis multiplicar, restar…
1 2 |
$origenDS = $origenDS.ForEach({[int]$PSItem * 3}) $origenDS = $origenDS.ForEach({[int]$PSItem - 1}) |
Espero os parezca interesante…
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?