Как прочитать имя и IP-адреса из файла? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть файл (.txt) со следующим форматом строки для содержимого:

<Name>     <IPAddress>

Например, содержимое файла может быть:

Tampa Server    10.73.202.91   
Hollywood Server    10.73.203.91   
Coconut Server  10.73.204.91   
Brighton Server 10.73.206.91    
Bollywood Server    10.73.207.91

Какэффективно читать IP-адреса в массив?

Ответы [ 4 ]

0 голосов
/ 17 ноября 2018

Или как насчет использования raw, split и join для контента ...

(Get-Content -Path D:\Temp\ServerIpaList.txt -Raw) -split '\s+(?=\d)' -join ',' | 
ConvertFrom-Csv -Header Name,IPAddress 

Name             IPAddress    
----             ---------    
Tampa Server     10.73.202.91 
Hollywood Server 10.73.203.91 
Coconut Server   10.73.204.91 
Brighton Server  10.73.206.91 
Bollywood Server 10.73.207.91 
0 голосов
/ 16 ноября 2018

это делает работу.

 $ServerAddressArray = @()
 $file #Set to file path here
 ForEach ($line in Get-Content $file)
 {
      $Columns = "ServerName", "IP"
      $Data = ConvertFrom-csv -inputobject $line -Header $Columns -Delimiter "`t"
      $ipAddress = $Data[0].IP.replace(' ', '');
      $ipAddress = $ipAddress.replace('`t', '');
      $ServerAddressArray+=$ipAddress
 }
0 голосов
/ 16 ноября 2018

Ваш файл использует несколько пробелов в качестве разделителя, которые Import-Csv не может обработать.

Но есть обходной путь использования Get-Content для замены этих пробелов одним символом

Эмуляция файла со строкой здесь

$Content = @"
Tampa Server    10.73.202.91   
Hollywood Server    10.73.203.91   
Coconut Server  10.73.204.91   
Brighton Server 10.73.206.91    
Bollywood Server    10.73.207.91
"@ -replace ' +(?=\d)','|'

$data = $Content | ConvertFrom-Csv -Header Name,IPAddress -Delimiter '|'
$data
# $data | Out-Gridview
# $data | Export-Csv '.\file.csv' -NoTypeInformation

Аналогично ответу Кориса, но с использованием регулярного выражения с заглядыванием вперед используются только пробелы, за которыми следует (не потребляющий) цифра в качестве разделителя.

Вывод в Gridview и экспорт в CSV-файл необязательны / закомментированы.

Пример вывода:

Name             IPAddress
----             ---------
Tampa Server     10.73.202.91
Hollywood Server 10.73.203.91
Coconut Server   10.73.204.91
Brighton Server  10.73.206.91
Bollywood Server 10.73.207.91
0 голосов
/ 16 ноября 2018

Что означают вышеприведенные комментарии, так это то, что вы должны показать свою работу, то, что вы исследовали, где у вас есть вопросы и т. Д., Поскольку вы новичок в PowerShell, чтобы другие могли догадаться, что вы знаете или не знаете.

Например, знаете ли вы, как читать файл, анализировать его, использовать регулярные выражения, pscustomobject и т. Д.?

$datafile = @'
Tampa Server    10.73.202.91   
Hollywood Server    10.73.203.91   
Coconut Server  10.73.204.91   
Brighton Server 10.73.206.91    
Bollywood Server    10.73.207.91
'@

$data = $datafile -split "`n"

$data.count

$obj = @()

$data | % {
    $line = $_
    $matches = [regex]::Matches($line, "(.*)(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)")
    $obj += [pscustomobject]@{'Name'=$matches.Groups[1].Value.Trim(); 'IP'=$matches.Groups[2].Value;}
    }

$obj
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...