Powershell读取大量文本文件,过滤信息并作为一行写入其他文本文件

问题描述 投票:1回答:1

对于即将到来的Windows 10迁移,我需要一个MAC地址,IP地址和计算机名称的列表。现在,当用户登录网络时,我们将自动生成许多文本文件。这些文本文件包含所需的信息。现在,我希望将此信息合并到一个文件中。

这是到目前为止的代码。

$p = @("Physikalische Adresse . . . . . . :","IPv4-Adresse  . . . . . . . . . . :","Hostname  . . . . . . . . . . . . :")
Get-ChildItem d:\pc\ -Filter *.txt |Get-Content |Select-String -Pattern $p |

但是输出结果如下:

Hostname  . . . . . . . . . . . . : Computername
Physikalische Adresse . . . . . . : MAC-address
IPv4-Adresse  . . . . . . . . . . : IP-Address(Bevorzugt) 
Physikalische Adresse . . . . . . : 00-00-00-00-00-00-00-E0

但是我想要这个输出:

计算机名Mac地址IP地址

00-00-00-00-00-00-00-E0地址应该被过滤掉,因为那些是Tunneladapter,所以不需要此信息。在一行中输出一个文件就足够了,因此我可以使用excel进行过滤。

目前,我大约有2000个文本文件。

文件内容示例:

10681EU;KREIS;Vico;\\DSFW1 

Microsoft Windows [Version 6.1.7601]
Neue Verbindungen werden nicht gespeichert.


Status       Lokal     Remote                    Netzwerk

-------------------------------------------------------------------------------
OK           F:        \\i6633_nw\vol1\daten     Microsoft Windows Network
OK           J:        \\i6633_nw\vol1\prog      Microsoft Windows Network
OK           K:        \\keltenring1\vol1        Microsoft Windows Network
OK           N:        \\52.0.13.25\Kreisarchiv  Microsoft Windows Network
OK           O:        \\i4811_nw_gw\vol1        Microsoft Windows Network
OK           P:        \\giga\vol1               Microsoft Windows Network
Der Befehl wurde erfolgreich ausgefhrt.


Windows-IP-Konfiguration

   Hostname  . . . . . . . . . . . . : 10681EU
   Prim„res DNS-Suffix . . . . . . . : kreis.lan
   Knotentyp . . . . . . . . . . . . : Hybrid
   IP-Routing aktiviert  . . . . . . : Nein
   WINS-Proxy aktiviert  . . . . . . : Nein
   DNS-Suffixsuchliste . . . . . . . : kreis.lan

Ethernet-Adapter LAN-Verbindung:

   Verbindungsspezifisches DNS-Suffix: 
   Beschreibung. . . . . . . . . . . : Realtek PCIe GBE Family Controller
   Physikalische Adresse . . . . . . : 1C-6F-65-92-DE-06
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja
   IPv4-Adresse  . . . . . . . . . . : 52.0.103.215(Bevorzugt) 
   Subnetzmaske  . . . . . . . . . . : 255.255.0.0
   Standardgateway . . . . . . . . . : 52.0.1.1
   DNS-Server  . . . . . . . . . . . : 52.0.13.199
                                       52.0.13.200
   NetBIOS ber TCP/IP . . . . . . . : Aktiviert

Tunneladapter LAN-Verbindung* 9:

   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix: 
   Beschreibung. . . . . . . . . . . : Microsoft-6zu4-Adapter
   Physikalische Adresse . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja

Tunneladapter LAN-Verbindung* 11:

   Medienstatus. . . . . . . . . . . : Medium getrennt
   Verbindungsspezifisches DNS-Suffix: 
   Beschreibung. . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
   Physikalische Adresse . . . . . . : 00-00-00-00-00-00-00-E0
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja
powershell text-files
1个回答
0
投票

您可以使用以下代码来创建表示数据的对象的ArrayList

1)创建ArrayList,它将保存所有文件中的合并数据

2)使用Get-ChildItem从目录中读取文件>

3)创建具有3个属性的psobject +使用-notlike-match运算符向属性填充数据。

假设:每个文件只有1个有效IP地址/主机名/物理地址。

$all = New-Object System.Collections.ArrayList

Get-ChildItem c:\temp\ -Filter *.txt | 
Foreach-Object {

    $content = Get-Content $_.FullName

    $obj = New-Object -TypeName psobject 
    $obj | Add-Member -MemberType NoteProperty -Name PhysicalAddress -Value ($content | where-object {($_ -notlike "*00-00-00-00-00*" -and $_ –match "Physikalische Adresse")} | foreach-object{$_.Split(":")[1].Trim()} | Select -First 1)
    $obj | Add-Member -MemberType NoteProperty -Name Hostname -Value ($content | where-object {($_ –match "HostName")} | foreach-object{$_.Split(":")[1].Trim()} | Select -First 1)
    $obj | Add-Member -MemberType NoteProperty -Name IPAddress -Value ($content | where-object {($_ –match "IPv4-Adresse")} | foreach-object{$_.Split(":")[1].Trim()} | Select -First 1)
    $all.Add($obj)
}

$all | Format-List

输出(数组):

PhysicalAddress : 1C-6F-65-92-DE-06
Hostname        : 10681EU
IPAddress       : 52.0.103.215
© www.soinside.com 2019 - 2024. All rights reserved.