2015-10-06 82 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