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-Сал выход Ответ:

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

Но опять-таки на вершине Имени есть один пробел. Мне нужно, чтобы удалить все, прежде чем нынешний WIN-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выход в настоящее время. Это кажется более рядным с тем, что вы ищете.

$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