【问题标题】:PowerShell to extract values from text file and export to csvPowerShell 从文本文件中提取值并导出到 csv
【发布时间】:2019-10-22 19:09:45
【问题描述】:

代码将导入文本并扫描文本文件以查找匹配 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

【问题讨论】:

    标签: powershell


    【解决方案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 行。
    • (?&lt;!Alias)\s+(?!\(CNAME\)) 匹配所有不在Alias(CNAME) 之间的连续空白。
    • -replace 将匹配的空白替换为 ,
    • ConvertFrom-Csv 只是将数据格式化为以逗号分隔的命名列标题。
    • Select-Object Server,Alias 只选择 ServerAlias 数据。如果您想要所有数据,可以完全删除此行。

    【讨论】:

    • 我怎样才能只列出记录只有别名(CNAME)记录?示例 内容文本文件 dev1 别名 (CNAME) zzzzz102_svc.xxx.yy.ds.
    • 您可以选择您想查看的属性。最后一个Select-Object 允许您选择四个属性的任意组合。听起来你想要Select-Object Server, Type, Alias
    • Select-Object 是否有 where 子句来过滤数据?在选择中,我只想选择与“别名(CNAME)”匹配的行。
    • 所以听起来您的文本文件中不仅有 CNAME 数据,即使您发布的内容没有。那是对的吗?而您只想查看 CNAME 数据?如果是这样,您能否发布一个原始文本示例,而不仅仅是 CNAME 文本?
    • 如果您解释一下ExportList.txt 是如何创建的,可能会有所帮助。它可能已经被正确分隔,这变得更加简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2020-04-07
    • 1970-01-01
    • 2016-01-09
    • 2020-08-07
    • 1970-01-01
    • 2020-09-16
    相关资源
    最近更新 更多