Powershell para volver a formatear el contenido del archivo

votos
30

Tengo un script que recibe el contenido de un archivo y comprueba por su ip. Luego de que se añade a algún otro archivo de texto.

[System.Collections.ArrayList]$hlist1 = Get-Content -Path C:\Timezone\Update\host.txt
$hiplist = New-Object System.Collections.ArrayList
$hlist2 = New-Object System.Collections.ArrayList
ForEach ($h in $hlist1)
{
 $hip = Resolve-DnsName $h
 $hiplist.Add($hip)
}
 $hiplist | Out-File C:\Timezone\Update\hiplist.txt

El archivo que está siendo creado es como se muestra a continuación:

             ----                         ----   ---   -------    --------
        WIN-JB2A2FS84MQ.domain.com        A      1200  Answer     10.3.0.4
                                                                   8       
        WIN-QP0BH4SD2H9.domain.com        A      1200  Answer     10.3.1.1
                                                                   9       

Necesito:

  1. deshacerse de las primeras líneas --------.
  2. obtener toda la IP en la misma línea (10.3.0.10)

Han intentado Format-Table -AutoSize, a continuación, Seleccionar -skip 1, etc, pero no hubo suerte.

¿Cómo se puede lograr esto.? Tenga en cuenta que el código funciona bien como se esperaba cuando se corrió de forma manual, pero lanza este problema cuando se ejecuta utilizando el programador de tareas.

Editar Sobre la base de la respuesta de Matt

Ahora el archivo de texto contiene:

Address,IPAddress,QueryType,IP4Address,Name,Type,CharacterSet,Section,DataLength,TTL
10.3.0.48,10.3.0.48,A,10.3.0.48,WIN-JB2A2FS84MQ.domain.com,A,Unicode,Answer,4,1200
10.3.1.19,10.3.1.19,A,10.3.1.19,WIN-QP0BH4SD2H9.domain.com,A,Unicode,Answer,4,1200

Peter-sal de salida de respuesta:

Name                            Type   TTL   Section    IPAddress                                
----                            ----   ---   -------    ---------                                
WIN-JB2A2FS84MQ.domain.com        A      1200  Answer     10.3.0.48
WIN-QP0BH4SD2H9.domain.com        A      1200  Answer     10.3.1.19

Pero, de nuevo en la parte superior del nombre hay un espacio. Tengo que eliminar todo lo que presente antes de WIN-JB2 .....

Publicado el 06/10/2015 a las 07:13
por usuario
En otros idiomas...                            


1 respuestas

votos
2

No puedo probar perfectamente, pero me gustaría volver a un comentario anterior de la mía. Resolve-DNSNamedevuelve los objetos por lo que su salida es mejor destinado para algo objeto conscientes. Export-CSVdebería ser preferible aquí.

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Export-Csv "C:\Timezone\Update\hiplist.txt" -NoTypeInformation

Normalmente no me gusta esto, pero si lo prefiere, debería ser capaz de utilizar la Format-tablesalida de hoy. Esto parece ser más en línea con lo que busca.

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Format-Table -HideTableHeaders | Select-Object -Skip 1 |
    Out-File "C:\Timezone\Update\hiplist.txt" -Width 200

Tal vez usted prefiere que la producción. La cabecera debe ser retirado ahora, así como una línea en blanco al principio.

Eso crea un poco de espacio en blanco antes y después de la salida. Una solución simple es envolver que en unaTrim()

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$results = ($hlist1 | ForEach-Object{Resolve-DnsName $_} |
    Format-Table -HideTableHeaders | 
    Out-string).Trim()`
$results | Out-File "C:\Timezone\Update\hiplist.txt" -Width 200`
Respondida el 06/10/2015 a las 07:35
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more