2013-09-10 5 views
1

У меня есть текстовый файл в этом формате:читать текстовый файл с помощью PowerShell

ServerName: srvrX1
IP:
Расположение: NY
OS:

ServerName: srvrX2
IP:
Местоположение: NY
ОС: Windows Server 2012
XYZ:

ServerName: srvrX3
IP:
Расположение: STK
OS: Win2k3

ServerName: srvrX4
IP:
Расположение: STK
OS: Win2k8

ServerName: srvrX5
IP:
Адрес: STK
ОС: RedHat Linux 5

ServerName: srvrX6
IP:
Расположение: TKY
ОС: Windows Server 2012

Количество полей может изменяться для каждого сервера и количество пустых строк между данными каждого сервера - randm. Мне нужен вывод в табличном формате. Я новичок в powershell, кто-то может помочь.

Большое спасибо. Nel

ответ

6

Вы можете разделить содержимое на два или более разрывов строк, а затем разделить каждый элемент возвращается снова, анализировать содержимое и создать новый объект для каждого элемента:

$content = Get-Content .\test.txt | Out-String 

$content -split '(?:\r\n){2,}' | Foreach-Object{ 

    $pso = New-Object PSObject 

    $_ -split '(?:\r\n)' | Where-Object {$_} | ForEach-Object{ 

     $var = $_ -split ':' 
     $pso | Add-Member -MemberType NoteProperty -Name $var[0].Trim() -Value $var[1].Trim() 
    } 

    $pso 

} 


ServerName IP Location OS     
---------- -- -------- --     
srvrX1  NY       
srvrX2  NY  Windows Server 2012 
srvrX3  STK  Win2k3    
srvrX4  STK  Win2k8    
srvrX5  STK  RedHat Linux 5  
srvrX6  TKY  Windows Server 2012 
+0

Спасибо большое. Прекрасно работает – user2764554

+1

@ user2764554, вы должны принять это как ответ, тем более, что вы сказали, что он работает отлично. –

Смежные вопросы