PowerShell για να διαμορφώσετε το περιεχόμενο του αρχείου

ψήφοι
30

Έχω ένα σενάριο που παίρνει περιεχόμενο από ένα αρχείο και ελέγχους για την ip του. Τότε που προστίθεται σε κάποιο άλλο αρχείο κειμένου.

[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

Το αρχείο που παίρνει δημιουργείται είναι όπως φαίνεται παρακάτω:

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

Εγώ πρέπει να:

  1. να απαλλαγούμε από τα πρώτα -------- γραμμές.
  2. να πάρει ολόκληρο το ip στην ίδια γραμμή (10.3.0.10)

Έχετε δοκιμάσει Format-Table -Autosize, στη συνέχεια, επιλέξτε -Skip 1 κλπ, αλλά καμία τύχη.

Πώς μπορεί αυτό να επιτευχθεί.? Παρακαλείστε να σημειώσετε ότι ο κωδικός λειτουργεί καλά όπως αναμενόταν όταν έτρεξε το χέρι, αλλά ρίχνει αυτό το θέμα, όταν εκτελούνται χρησιμοποιώντας το Χρονοδιάγραμμα εργασιών.

Επεξεργασία Με βάση την απάντηση του Ματ

Τώρα το αρχείο κειμένου περιέχει:

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 της εξόδου απάντηση:

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

Αλλά και πάλι στην κορυφή του Όνομα υπάρχει ένα διάστημα. Θα πρέπει να διαγράψετε τα πάντα παρόντες πριν από ΝΙΚΗ-JB2 .....

Δημοσιεύθηκε 06/10/2015 στις 10:13
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
2

Δεν μπορώ να δοκιμάσουν τέλεια, αλλά θα ήθελα να επανέλθω σε ένα προηγούμενο σχόλιο μου. Resolve-DNSNameΕπιστρέφει αντικείμενα έτσι ώστε η παραγωγή τους είναι καλύτερη προορισμένο για κάτι αντιρρήσεις γνωρίζουν. Export-CSVθα πρέπει να είναι προτιμότερη εδώ.

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

Εγώ κανονικά δεν μου αρέσει αυτό, αλλά αν προτιμάτε, μπορείτε να είστε σε θέση να χρησιμοποιήσετε την Format-tableέξοδο τώρα. Αυτό φαίνεται να είναι πιο inline με αυτό που ψάχνετε.

$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

Ίσως προτιμάτε αυτό το έξοδο. Η κεφαλίδα θα πρέπει να αφαιρεθεί τώρα καθώς και μια κενή γραμμή στην αρχή.

Αυτό δημιουργεί κάποιο κενό διάστημα πριν και μετά την έξοδο. Απλή λύση είναι να τυλίξετε ότι σε μιαTrim()

$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`
Απαντήθηκε 06/10/2015 στις 10:35
πηγή χρήστη

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