如何从文件中读取名称和IP地址?

时间:2018-11-16 19:34:21

标签: powershell

我有一个文件(.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 :(得分:1)

以上注释的意思是,当您刚接触PowerShell时,应该显示您的工作,研究的内容,有问题的地方等,以便其他人可以猜测您可能知道或不知道的内容。 / p>

例如,您知道如何读取文件,解析文件,使用正则表达式,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

答案 1 :(得分:0)

这完成了工作。

 $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
 }

答案 2 :(得分:0)

您的文件使用多个空格作为Import-Csv无法处理的定界符。

但是有一种解决方法,可以使用Get-Content用单个字符替换这些空格

使用here字符串模拟文件

$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

类似于Korys的答案,但使用带前瞻性的正则表达式仅使用空格后跟(非消耗性)数字作为定界符。

到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

答案 3 :(得分:0)

或者在内容上使用原始,拆分和合并...

(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