在Powershell中将列表/阵列导出为CSV

在Powershell中将列表/阵列导出为CSV,powershell,csv,export,Powershell,Csv,Export,做了一些谷歌搜索,但我发现答案似乎比我需要的更复杂。我有一个简单的脚本来获取DNS缓存条目,我想以最“powershell”的方式将结果导出到CSV。代码如下所示: function Get-Dns { $domains = @() $cmdOutput = Invoke-Command -ScriptBlock {ipconfig /displaydns} ForEach ($line in $($cmdOutput -split "`r`n")) {

做了一些谷歌搜索,但我发现答案似乎比我需要的更复杂。我有一个简单的脚本来获取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似乎只是输出每个元素的长度,而不是内容本身。感谢您的帮助

最强大的shell方式:

(ipconfig /displaydns|where{$_-match'Record Name'})|%{$_.split(":")[1].Trim()}>dnscache.txt
“ipconfig/displaydns”将返回一个大的“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

对不起!我知道这很混乱。

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

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

哇!非常有用。非常感谢。快速提问-我正在测试的某些主机似乎支持此功能,但其他主机不支持此功能?有没有办法确保它在安装了powershell的任何系统上运行?谢谢添加-CimSession参数:-CimSession Ah,看起来Win7不支持Get-DnsClientCache。瘸的我想我得走这条路了。是的,Windows7没有用于该命令的必要操作系统位。我相信你是对的。谢谢你的意见!除了使用导出Csv功能外,是否有其他方法可以实现相同的结果?我正在努力与已经存在的脚本的其他方面保持一致。如果没有看到脚本的其他部分,我无法告诉您如何做到这一点。为了将数据正确地输出到csv中,您需要创建一个对象,我将给出一个示例并发布另一个答案。事实上,@LordAdam似乎有一个很好的解决方案,可以满足您可能需要的功能,这正是我的想法。