PowerShell pentru a reformata conținutul fișierului

voturi
30

Am un script care devine conținut dintr-un fișier și controale pentru IP sale. Apoi, care se adaugă la un alt fișier text.

[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

Fișierul care este obtinerea creat este așa cum se arată mai jos:

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

Trebuie sa:

  1. a scăpa de primele -------- linii.
  2. obține întreaga ip-ul în aceeași linie (10.3.0.10)

Au încercat Format-Table -Autosize, apoi selectați -Skip 1, etc, dar nici noroc.

Cum se poate realiza acest lucru.? Vă rugăm să rețineți că acest cod funcționează bine cum era de așteptat, atunci când acesta este fugit manual, dar aruncă această problemă atunci când sunt executate folosind Task Scheduler.

Editați Pe baza răspunsului lui Matt

Acum, fișierul text conține:

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 ieșire răspuns:

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

Dar, din nou, pe partea de sus a numelui există un spațiu. Am nevoie pentru a șterge tot înainte de a prezenta WIN-JB2 .....

Întrebat 06/10/2015 la 10:13
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
2

Nu pot testa perfect , dar aș dori să se întoarcă la un comentariu anterior al meu. Resolve-DNSNamereturnează obiecte astfel încât producția lor este mai bine pentru ceva obiecta , menire conștient. Export-CSVar fi de preferat aici.

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

Eu în mod normal , nu - mi place acest lucru , dar dacă preferați ar trebui să fie capabil de a utiliza Format-tableieșire acum. Acest lucru pare a fi mai în linie cu ceea ce căutați.

$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

Poate ai prefera ca ieșire. Antetul trebuie să fie eliminate acum, precum și o linie goală la început.

Acest lucru creează unele alb-spațiu înainte și după ieșire. soluție simplă este să-și încheie ca într-oTrim()

$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`
Publicat 06/10/2015 la 10:35
sursa de către utilizator

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