Leer múltiples valores de un archivo de texto en powershell y luego manipular los valores
Frecuentes
Visto 11,633 veces
1
Perdone la pregunta de principiante, soy nuevo en powershell y estoy tratando de hacer algo que debería ser muy fácil.
tengo un archivo de texto con los siguientes contenidos
DEVICE ID: {E24CF707-F030-48DC-8E1A-59B96148BF52}
DEVICE NAME: All Devices (RAINBOW-SRV)
TYPE: Drive pool
DEVICE ID: {D16DC75F-8A8B-4AEC-A411-9B0BC58CBF16}
DEVICE NAME: HP 1
TYPE: Drive
DEVICE ID: {F2D2AB4A-1FBE-4158-AB62-6A94AE4392E2}
DEVICE NAME: RAINBOW-SRV
TYPE: Machine
DEVICE ID: {23AD5D42-00A8-496B-96E5-1F5CAA3F9E9D}
DEVICE NAME: Symantec Protection Network (RAINBOW-SRV)
TYPE: Symantec Protection Network
RETURN VALUE: 1
Estoy tratando de obtener la cadena que sigue al NOMBRE DEL DISPOSITIVO: en cada ocurrencia en una matriz para pasar a un comando más adelante en la línea. Probé el siguiente código pero aparece un error que indica que Substring no es un método válido.
¡Siento que me estoy perdiendo algo muy obvio pero no puedo verlo! cualquier ayuda sería muy apreciada.
Muchas Gracias
3 Respuestas
1
Lea el contenido del archivo, filtre las líneas que comienzan con 'NOMBRE DEL DISPOSITIVO:', para cada línea elimine (reemplace sin nada) 'NOMBRE DEL DISPOSITIVO:'
Get-Content devices.txt | Where-Object {$_ -like 'DEVICE NAME:* '} | Foreach-Object {$_ -repla
ce '^DEVICE NAME: '}
All Devices (RAINBOW-SRV)
HP 1
RAINBOW-SRV
Symantec Protection Network (RAINBOW-SRV)
ACTUALIZACIÓN: por solicitud de OT, cómo pasar el valor a un comando ejecutable
Get-Content devices.txt |
Where-Object {$_ -like 'DEVICE NAME:* '} |
Foreach-Object {
$device = $_ -replace '^DEVICE NAME: '
app.exe "$device"
}
contestado el 22 de mayo de 12 a las 15:05
$a = Obtener contenido C:\NetESP\BackupTapeCheck\DriveDetails.txt | Select-String "NOMBRE DEL DISPOSITIVO:" foreach ($línea en $a) {$línea.Subcadena(13)} - steveo448
No funciona porque $line es un objeto MatchInfo y no tiene un método Substring. Debe consultar su propiedad Line: $line.line.Substring(13). También puede convertirlo en cadena de muchas otras formas, como: "$line".Substring(13) o $line.ToString().Substring(13) - shay levy
Gracias Shay, ¡he estado intentando durante más tiempo del que me gustaría admitir para volver a poner eso en una cuerda! - steveo448
Mientras tengo esto abierto, ¿sabe cómo pasaría cada una de estas líneas a un comando ejecutable una a la vez? Supongo que los 4 valores están en una matriz, pero no estoy seguro de cuál sería el nombre. - steveo448
1
Otra solución:
$list = @((get-content devices.txt) | where { $_ -match "DEVICE NAME:\s*(?<Device>.+)\s*" } | %{ $matches["Device"] })
$list
contestado el 22 de mayo de 12 a las 15:05
Con frecuencia uso este método. - Marceljg
0
Otra solución más:
Get-Content -Path .\devices.txt |
Select-String 'DEVICE NAME: ' |
Foreach-Object {
$_.ToString() -replace '^DEVICE NAME: ','app.exe '
}
Respondido 18 Feb 15, 02:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas powershell or haz tu propia pregunta.
¿Creo que olvidaste pegar tu código? - nimizen