Powershell den Dateiinhalt zu formatieren

stimmen
30

Ich habe ein Skript, das Inhalte aus einer Datei und prüft, ob seine IP bekommt. Dann wird das zu einer anderen Textdatei hinzugefügt.

[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

Die Datei, die erstellt wird, immer ist wie folgt:

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

Ich muss einfach:

  1. loszuwerden der ersten -------- Linien.
  2. Holen Sie sich die gesamte IP in der gleichen Linie (10.3.0.10)

Haben Sie versucht Format-Table -Autosize, dann wählen -Skip 1 usw., aber kein Glück.

Wie kann dies erreicht werden.? Bitte beachten Sie, dass der Code funktioniert wie erwartet, wenn es manuell läuft, aber das Problem löst, wenn Task-Scheduler ausgeführt werden.

Bearbeiten Basierend auf Matts Antwort

Nun ist die Textdatei enthält:

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 Antwort Ausgang:

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

Aber auch hier oben auf Namen gibt es einen Raum. Ich muss alles löschen vorhanden, bevor WIN-JB2 .....

Veröffentlicht am 06/10/2015 um 10:13
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Ich kann nicht perfekt testen , aber ich möchte auf einen früheren Kommentar von mir kommen. Resolve-DNSNameObjekte gibt so ihre Ausgabe für etwas Objekt bewusst besser bestimmt ist. Export-CSVsollte hier vorzuziehen.

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

Ich normalerweise gefällt das nicht , aber wenn Sie es vorziehen , sollten Sie die nutzen können Format-tablejetzt ausgegeben. Dies scheint mit mehr inline zu sein , was Sie suchen.

$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

Vielleicht haben Sie diese Ausgabe bevorzugen. Der Header sollte nun sowie eine Leerzeile am Anfang entfernt werden.

Das schafft einen weiß-Raum vor und nach dem Ausgang. Einfache Lösung besteht darin, dass in einem einpackenTrim()

$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`
Beantwortet am 06/10/2015 um 10:35
quelle vom benutzer

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