Powershell 如何阅读姓名和姓名;文件中的IP地址?

Powershell 如何阅读姓名和姓名;文件中的IP地址?,powershell,Powershell,我有一个文件(.txt),其内容的每行格式如下: <Name> <IPAddress> 如何有效地将IP地址读入阵列?以上评论的意思是,您应该展示您的工作、您研究的内容、您有问题的地方等。因为您是PowerShell新手,所以其他人可以猜测您可能知道或不知道的内容 例如,您知道如何读取文件、解析文件、使用正则表达式、pscustomobject等吗 $datafile = @' Tampa Server 10.73.202.91 Hollywood

我有一个文件(.txt),其内容的每行格式如下:

<Name>     <IPAddress>

如何有效地将IP地址读入阵列?

以上评论的意思是,您应该展示您的工作、您研究的内容、您有问题的地方等。因为您是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

这就完成了工作

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

您的文件使用多个空格作为分隔符,
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 answer类似,但使用带有前瞻的正则表达式,仅使用后跟(非消耗)数字的空格作为分隔符

输出到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

或者在内容上使用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 

安德烈莫尔顿Thanks@Monku即使是问题也应该具有持久的价值,以便后续读者不会被否决/搁置。你可能应该(再一次)采取行动。
(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