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

时间:2018-04-05 17:30:40

标签: 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似乎只输出每个元素的长度而不是内容本身。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:2)

大多数 PowerShell方式:

(ipconfig /displaydns|where{$_-match'Record Name'})|%{$_.split(":")[1].Trim()}>dnscache.txt

答案 1 :(得分:1)

“ipconfig / displaydns”将返回一个big'ol字符串数组,这将更难以使用。尝试使用本机命令行开关进行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

抱歉!我知道这很麻烦。

答案 2 :(得分:0)

我最终将多个值数组导出到csv

$Data | %{$_} | export-csv -nti -Path C:\