代码将导入文本并扫描文本文件以查找与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
答案 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
跳过文件的第一行。第一行是server
和alias
行。(?<!Alias)\s+(?!\(CNAME\))
匹配Alias
和(CNAME)
之间不存在的所有连续空白。-replace
用,
替换匹配的空白。ConvertFrom-Csv
仅用于格式化要用命名列标题以逗号分隔的数据。Select-Object Server,Alias
仅选择Server
和Alias
数据。如果需要所有数据,可以完全删除此行。