Powershell重新格式化文件内容

时间:2015-10-06 11:13:31

标签: powershell

我有一个脚本从一个文件中获取内容并检查其ip。然后将其添加到其他文本文件中。

[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)
  3. 尝试过Format-Table -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"
    

    Peter-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
    

    但是在Name之上还有一个空格。我需要在WIN-JB2之前删除所有内容......

1 个答案:

答案 0 :(得分: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`