Powershell pour reformater le contenu du fichier

voix
30

J'ai un script qui obtient le contenu d'un fichier et vérifie son adresse IP. Ensuite, qui est ajouté à un autre fichier texte.

[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

Le fichier qui se crée est comme indiqué ci-dessous:

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

J'ai besoin de:

  1. se débarrasser des premières lignes --------.
  2. obtenir l'IP entier dans la même ligne (10.3.0.10)

Ont essayé Format-Table -Autosize, puis sélectionnez -skip 1 etc, mais pas de chance.

Comment cela peut il etre accompli.? S'il vous plaît noter que le code fonctionne bien comme prévu quand il est couru manuellement, mais jette ce problème lorsqu'il est exécuté en utilisant le planificateur de tâches.

Modifier Sur la base de la réponse de Matt

Maintenant, le fichier texte contient:

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

La sortie de réponse de Pierre-de sal:

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

Mais encore une fois au-dessus du nom il y a un espace. Je dois supprimer tout présent avant WIN-JB2 .....

Créé 06/10/2015 à 10:13
utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je ne peux pas tester parfaitement mais je voudrais revenir à un commentaire précédent de la mine. Resolve-DNSNameretourne des objets de sorte que leur sortie est mieux prédestiné pour quelque chose objet au courant. Export-CSVdevrait être préférable ici.

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

Normalement , je ne l' aime pas , mais si vous préférez , vous devriez être en mesure d'utiliser la Format-tablesortie maintenant. Cela semble être plus en ligne avec ce que vous recherchez.

$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

Peut-être que vous préférez que la production. L'en-tête doit être retiré maintenant, ainsi qu'une ligne blanche au début.

Cela crée un certain espace blanc avant et après la sortie. Une solution simple consiste à envelopper que dans unTrim()

$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`
Créé 06/10/2015 à 10:35
source utilisateur

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