PowerShell sformatować zawartość pliku

głosy
30

Mam skrypt, który pobiera dane z jednego pliku i kontroli dla jego ip. Następnie dodaje, że do jakiegoś innego pliku tekstowego.

[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

Plik, który jest uzyskiwanie tworzony jest w sposób przedstawiony poniżej:

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

Potrzebuję:

  1. pozbyć pierwszych -------- linii.
  2. dostać całą IP w tej samej linii (10.3.0.10)

Próbowaliśmy Format-Table -Autosize, a następnie wybierz -skip 1 etc, ale bez powodzenia.

Jak można to osiągnąć.? Należy pamiętać, że kod działa dobrze, jak oczekiwano, gdy jest on prowadził ręcznie, ale rzuca ten problem, gdy wykonywany za pomocą harmonogramu zadań.

Edytować oparciu o odpowiedź Matta

Teraz plik tekstowy zawiera:

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 wyjście odpowiedź:

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

Ale znowu na szczycie Nazwa jest jedna przestrzeń. Muszę usunąć wszystko obecny przed WIN-JB2 .....

Utwórz 06/10/2015 o 10:13
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Nie mogę przetestować idealnie, ale chciałbym wrócić do wcześniejszego komentarza kopalni. Resolve-DNSNamezwraca obiekty więc ich produkcja jest lepiej Skazany na coś sprzeciw świadoma. Export-CSVpowinna być tutaj korzystne.

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

I zwykle nie podoba, ale jeśli wolisz, powinieneś być w stanie korzystać z Format-tablewyjścia teraz. To wydaje się być bardziej inline z tym, co szukasz.

$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

Być może wolisz wyjście. Nagłówek powinien być usunięty teraz, jak i pustej linii na początku.

Który tworzy pewną white-space przed i po wyjściu. Prostym rozwiązaniem jest owinąć się w sposób, któryTrim()

$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`
Odpowiedział 06/10/2015 o 10:35
źródło użytkownik

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