PowerShell从文本文件中提取值并导出到csv

时间:2019-10-22 19:09:45

标签: powershell

代码将导入文本并扫描文本文件以查找与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 个答案:

答案 0 :(得分:1)

如果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跳过文件的第一行。第一行是serveralias行。
  • (?<!Alias)\s+(?!\(CNAME\))匹配Alias(CNAME)之间不存在的所有连续空白。
  • -replace,替换匹配的空白。
  • ConvertFrom-Csv仅用于格式化要用命名列标题以逗号分隔的数据。
  • Select-Object Server,Alias仅选择ServerAlias数据。如果需要所有数据,可以完全删除此行。