powershell - 在Powershell中将列表/数组导出为CSV

标签 powershell csv export

做了一些谷歌搜索,但我发现的答案似乎比我需要的要复杂。我有一个简单的脚本来获取DNS缓存条目,并且我想以最“powershell”的方式将结果导出到CSV。代码如下:

function Get-Dns
{
    $domains = @()
    $cmdOutput = Invoke-Command -ScriptBlock {ipconfig /displaydns}
    ForEach ($line in $($cmdOutput -split "`r`n"))
    {
        if ($line -like '*Record Name*'){
            $domain = $line -split ":"
            $domains += $domain[1]
    }
}

所以我有一个数组$ domains,我想使用Export-CSV本质上输出一列CSV,每行一个域。使用Export-CSV似乎只是输出每个元素的长度,而不是内容本身。任何帮助表示赞赏!

最佳答案

“ipconfig / displaydns”将为您提供一个big'ol字符串数组,它将很难使用。尝试使用本地Commandlet进行DNS操作:

Get-DnsClientCache | Export-Csv -Path .\stuff.csv

如果您使用的是Windows 7或更早版本,请尝试以下操作...
$dns_client_cache = @()
$raw_dns_data = ipconfig /displaydns
for ($element = 3; $element -le $raw_dns_data.length - 3; $element++) {
    if ( $raw_dns_data[$element].IndexOf('Record Name') -gt 0 ) {
        if ( $dns_entry ) { $dns_client_cache += $dns_entry }
        $dns_entry = New-Object -TypeName PSObject
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'RecordName' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    } elseif ( $raw_dns_data[$element].IndexOf('Record Type') -gt 0 ) {
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'RecordType' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    } elseif ( $raw_dns_data[$element].IndexOf('Time To Live') -gt 0 ) {
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'TimeToLive' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    } elseif ( $raw_dns_data[$element].IndexOf('Data Length') -gt 0 ) {
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'DataLength' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    } elseif ( $raw_dns_data[$element].IndexOf('Section') -gt 0 ) {
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'Section' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    } elseif ( $raw_dns_data[$element].IndexOf('CNAME Record') -gt 0 ) {
        Add-Member -InputObject $dns_entry -MemberType NoteProperty -Name 'CNAMERecord' -Value $raw_dns_data[$element].Split(':')[1].Trim()
    }
}

$dns_client_cache | Export-Csv -Path .\dns_stuff.csv -Force -NoTypeInformation

抱歉!我知道这很乱。

关于powershell - 在Powershell中将列表/数组导出为CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49678217/

相关文章:

python - csv导入sqlite3而不指定列类型

php - 清除表中的所有数据,但保留列/结构

csv - 检测 .csv 文件是否实际上是 .xls (Excel) 文件

ms-access - 使用波形符分隔符将 MSAccess 表导出为 Unicode

ios - 将大量数据从核心数据导出到json

c++ - 用 C++ 将数据写入文件 - 最有效的方式?

sql-server - 在PowerShell中调用存储过程以插入SQL Server数据库

powershell - "Windows Powershell compatibility (.net standard 2.0)"是什么意思?

multithreading - Foreach 对象比 foreach -parallel 更快?

Powershell v5.1 Invoke-RestMethod 并绕过代理