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