2015-10-06 124 views
1

我有一个脚本,它从一个文件获取内容并检查其IP。然后将其添加到其他文本文件中。Powershell重新格式化文件内容

[System.Collections.ArrayList]$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt" 
$hiplist = New-Object System.Collections.ArrayList 
$hlist2 = New-Object System.Collections.ArrayList 
ForEach ($h in $hlist1) 
{ 
$hip = Resolve-DnsName $h 
$hiplist.Add($hip) 
} 
$hiplist | Out-File "C:\Timezone\Update\hiplist.txt" 

这是越来越创建如下图所示的文件:

   ----       ---- --- ------- -------- 
     WIN-JB2A2FS84MQ.domain.com  A  1200 Answer  10.3.0.4 
                    8  
     WIN-QP0BH4SD2H9.domain.com  A  1200 Answer  10.3.1.1 
                    9  

我需要:

  1. 摆脱第一--------线。
  2. 得到整个IP在同一行(10.3.0.10)

试过格式表-AutoSize,然后选择-Skip 1等,但没有运气。

这是如何实现的?请注意,代码在手动运行时可以正常工作,但在使用任务计划程序执行时会引发此问题。

编辑基于马特的答案

现在的文本文件包含:

"Address","IPAddress","QueryType","IP4Address","Name","Type","CharacterSet","Section","DataLength","TTL" 
"10.3.0.48","10.3.0.48","A","10.3.0.48","WIN-JB2A2FS84MQ.domain.com","A","Unicode","Answer","4","1200" 
"10.3.1.19","10.3.1.19","A","10.3.1.19","WIN-QP0BH4SD2H9.domain.com","A","Unicode","Answer","4","1200" 

彼得-SAL的答复输出:

Name       Type TTL Section IPAddress         
----       ---- --- ------- ---------         
WIN-JB2A2FS84MQ.domain.com  A  1200 Answer  10.3.0.48 
WIN-QP0BH4SD2H9.domain.com  A  1200 Answer  10.3.1.19 

但同样的名称的顶部有一个空间。我需要删除WIN-JB2之前的所有内容.....

+0

这可能是Array列表如何转换为字符串输出的问题。我的猜测是这是你的问题。解决这个问题是使用不同的导出方法或使用自定义对象的问题。 'Out-File'会试着将它转换为字符串以便输出......这就是你所看到的。任何你使用数组列表的理由? – Matt

+0

@Matt:不完全。奇怪的是,相同的代码在手动运行时按预期工作。当我使用任务调度器触发powershell代码时,我遇到了这种类型的问题。 – serverstackqns

+0

'Resolve-DnsName'返回对象,因此将它们转换为字符串会变得很奇怪。我没有这个cmdlet可用的系统,所以我个人无法测试。 – Matt

回答

2

我无法完美测试,但我想回到之前对我的评论。 Resolve-DNSName返回对象,以便它们的输出更好地指向对象感知的对象。 Export-CSV应该在这里更好。

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt" 
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Export-Csv "C:\Timezone\Update\hiplist.txt" -NoTypeInformation 

我通常不喜欢这个,但如果你愿意,你现在应该可以使用Format-table输出。这似乎更符合你所寻找的内容。

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt" 
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Format-Table -HideTableHeaders | Select-Object -Skip 1 | 
    Out-File "C:\Timezone\Update\hiplist.txt" -Width 200 

也许你更喜欢那个输出。标题现在应该被删除,并且在开始时应该是空行。

在输出之前和之后创建一些空白区域。简单的解决方案是将其包装在一个Trim()

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt" 
$results = ($hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Format-Table -HideTableHeaders | 
    Out-string).Trim()` 
$results | Out-File "C:\Timezone\Update\hiplist.txt" -Width 200` 
+0

@Question用当前输出编辑,请参阅。现在它的一团糟 – serverstackqns

+0

现在它是一个CSV。逗号分隔值。在Excel中看起来不错。 –

+0

@ Deadly-Bagel:如果可能的话,我想用我在帖子中提到的方式。 – serverstackqns