PowerShell для извлечения значений из текстового файла и экспорта в CSV - PullRequest
0 голосов
/ 22 октября 2019

Код будет импортировать текст и сканировать текстовые файлы в поисках записей на соответствие CNAME, а также экспортировать значения имени сервера и псевдонима в файл CSV? Вопрос в том, как выбрать значения?

 Get-Content \\fzzzzz\rrrrr\ttttt\DNSExport\ExportList.txt | select-string 'CNAME' -SimpleMatch -Context 0,1 | Out-file "C:\temp\extract.txt"


    Example of my text file

    server                          Alias
    XXXXXXXXX       Alias (CNAME)   server1.xxxx.yy.zz. static
    ZZZZZZZZZ   Alias (CNAME)   server2.xxxx.yy.zz. static
    AAAAAAAAA   Alias (CNAME)   server3.xxxx.yy.zz. static
    BBBBBBBBB   Alias (CNAME)   server4.xxxx.yy.zz. static
    CCCCCCCCC   Alias (CNAME)   server5.xxxx.yy.zz. static

1 Ответ

1 голос
/ 22 октября 2019

Если ExportList.txt - это просто дамп из зоны DNS-сервера или DNS-сервера и он разделен, вы можете сделать следующее:

Get-Content \\fzzzzz\rrrrr\ttttt\DNSExport\ExportList.txt |
  Where-Object { $_ -match 'Alias \(CNAME\)' } |
    ConvertFrom-Csv -Delimiter "`t" -Header 'Alias','Type','Server','Timestamp' |
      Select-Object Alias,Type,Server |
        Export-Csv output.csv -NoType

Предполагается, что вашим разделителем является символ табуляции. Вы можете изменить разделитель по своему усмотрению.


Если ваш пример текстового файла называется cname.txt без правильных разделителей, я бы сделал следующее:

((Get-Content cname.txt).Trim() |
  Select-Object -Skip 1) -replace "(?<!Alias)\s+(?!\(CNAME\))",',' |
    ConvertFrom-Csv -Header 'Server','Type','Alias','Timestamp' |
      Select-Object Server,Alias |
        Export-Csv output.csv -NoType

Объяснение:

  • Trim() удаляет начальные и конечные пробелы (в данном случае для каждой строки).
  • Select-Object -Skip 1 пропускает первую строку файла,Первая строка будет строкой server и alias.
  • (?<!Alias)\s+(?!\(CNAME\)) соответствует всем последовательным пробелам, которые не находятся между Alias и (CNAME).
  • -replace заменяет согласованный пробел на ,.
  • ConvertFrom-Csv просто для форматирования данных, разделенных запятыми, с именованными заголовками столбцов.
  • Select-Object Server,Alias просто выбирает Server и Alias данные. Вы можете полностью удалить эту строку, если хотите получить все данные.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...