Powershell читает много текстовых файлов, фильтрует информацию и записывает в другой текстовый файл одной строкой - PullRequest
1 голос
/ 30 октября 2019

Для предстоящей миграции на 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

Ноя хотел бы получить следующий вывод:

IP-адрес Mac-адреса Computername

Адреса 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

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете использовать следующий код для создания ArrayList объектов, представляющих ваши данные.

1) Создать ArrayList, который будет содержать объединенные данные из всех файлов

2)Чтение файлов из каталога с использованием Get-ChildItem

3) Создание psobject с 3 свойствами + заполнение свойств данными с использованием операторов -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
...