PowerShell: Script para buscar líneas en ficheros XML
Entrada rápida…
Os comparto un script de PowerShell que nos va a permitir:
- Revisar una carpeta XML donde unas máquinas generan ficheros XML periódicamente
- Listamos los ficheros y los comprobamos uno a uno, leyendo su contenido
- Buscamos dos valores, uno numérico (MACHREFNO) y otro de texto (MACHNAME). Estos valores numéricos corresponden a un valor concreto de texto.
- Necesitamos que de todos los resultados que se encuentren, se limpien y se queden solo los valores únicos
- Se exporta el resultado a CSV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# Ruta donde están los archivos XML $path = "V:\MAQUINAS\*.xml" # Lista para almacenar los resultados $results = @() # Recorrer cada archivo XML en la carpeta Get-ChildItem -Path $path -File | ForEach-Object { $file = $_.FullName Write-Host "Procesando: $file" # Leer el contenido del archivo $content = Get-Content -Path $file -Raw # Buscar todas las coincidencias en el archivo $machRefMatches = Select-String -InputObject $content -Pattern "<MACHREFNO>(\d+)</MACHREFNO>" -AllMatches $machNameMatches = Select-String -InputObject $content -Pattern "<MACHNAME>([^<]+)</MACHNAME>" -AllMatches # Verificar si se encontraron coincidencias if ($machRefMatches -and $machNameMatches) { for ($i = 0; $i -lt $machRefMatches.Matches.Count; $i++) { $machRefValue = $machRefMatches.Matches[$i].Groups[1].Value # Extraer MACHREFNO $machNameValue = $machNameMatches.Matches[$i].Groups[1].Value # Extraer MACHNAME # Guardar en la lista de resultados $results += [PSCustomObject]@{ MACHREFNO = $machRefValue MACHNAME = $machNameValue } } } } # Obtener valores únicos (evitar duplicados) $uniqueResults = $results | Sort-Object MACHREFNO -Unique # Mostrar los resultados en pantalla Write-Host "`nValores únicos encontrados: $($uniqueResults.Count)" -ForegroundColor Cyan $uniqueResults | ForEach-Object { Write-Host " ➜ MACHREFNO: $($_.MACHREFNO) | MACHNAME: $($_.MACHNAME)" } # Guardar en un archivo CSV $csvFile = "V:\MachRefNo_MachName_ValoresUnicos.csv" $uniqueResults | Export-Csv -Path $csvFile -NoTypeInformation -Encoding UTF8 Write-Host "`n✅ Proceso finalizado. Revisa el CSV en: $csvFile" -ForegroundColor Cyan |
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?