potshock
Goto Top

Hilfe bei Powershell Schleife benötigt

Hallo Powershell User,

tja, da bin ich wieder und benötige Deine/Eure Hilfe beim Bau einer Schleife.

Ziel ist es an einem PC per script für alle Netzwerkadapter die Mac- und die Ip-Adresse auszulesen.

########################################################################################
# # Pfad zur Ausgabedatei, Dateinamen: aus Inventarnr. und zweitem Teil
$Name2Teil = "_pc.txt"  
$Datei = "$env:SystemDrive\Users\$env:USERNAME\Desktop\netz.txt"  
#######################################################################################
# Ethernet-Adapter Ethernet und Drahtlos-LAN-Adapter WLAN werden per Schleife eingelesen
#######################################################################################
# ipconfig /all wird in Variable geschrieben
$Input = ipconfig /all

# Adapter Variable wird auf "kein Adapter gefunden" gesetzt 
$Adapter = $false

# Schleife durchlaeuft jede Zeile vom $Input
foreach($line in $Input) {

    # Leerzeile gefunden, dann continue
    if($line.length -eq 0) {
        continue
    }

    # Zeile mit 3 Leerzeichen am Anfang
    if($line -like "   *") {  
        
        # Erst wenn Adapter weiter unten gefunden wurde
        if($Adapter) {

            # Nachdem Adapter gefunden wurde, wird MAC gesucht
            if($line -match "Physische Adresse") {  
                $Mac = $line
            }

            # Nachdem Adapter gefunden wurde, wird IP gesucht
            if($line -match "IPv4-Adresse") {  
                $Ip = $line
            }
        }
    }

    else {
    
        # Adapter Variable wird auf "kein Adapter gefunden" (zurück)gesetzt 
        $Adapter = $false

        # Wenn Treffer(match) wird Adapter Variable auf true gesetzt
        if($line -match "Ethernet-Adapter Ethernet") {  
           $Adapter = $true
           $AdapterLan = $line
        }
        # Wenn Treffer(match) wird Adapter Variable auf true gesetzt
        if($line -match "Drahtlos-LAN-Adapter WLAN") {  
           $Adapter = $true
           $AdapterWlan = $line
        }
    }
}


Add-Content -Path $datei -Value "Netzwerk:"   
Add-Content -Path $datei -Value ""    
Add-Content -Path $datei -Value "$AdapterLan"  
Add-Content -Path $datei -Value "MAC-Adresse:              $Mac"  
Add-Content -Path $datei -Value "IP-Adresse:                   $Ip"  
Add-Content -Path $datei -Value "$AdapterWlan"  
Add-Content -Path $datei -Value "MAC-Adresse:              $Mac"  
Add-Content -Path $datei -Value "IP-Adresse:                   $Ip"  
Add-Content -Path $datei -Value ""   

Leider überschreibt meine Schleife bei jedem Durchlauf die vorher gefunden Mac- und Ip Adresse mit den jeweils letzten gefunden Werten.
Ich muss diese also vor jedem Durchlauf in meine Ausgabedatei schreiben und die Variablen wieder leeren.
Aber dazu bin ich mal wieder zu doof, wie mache ich das?
$Mac = ""  
$Ip = ""  
Egal an welcher Stelle im Script ich diese leeren lassen, es funktioniert nicht!

Wer kann mir helfen?

Wünsche Dir/Euch einen schönen Tag

Potshock

Content-Key: 581298

Url: https://administrator.de/contentid/581298

Printed on: May 11, 2024 at 03:05 o'clock

Member: canlot
canlot Jun 23, 2020 at 11:17:54 (UTC)
Goto Top
Hi,

mach das doch mit Get-NetAdapter, ist viel einfacher.
Member: potshock
potshock Jun 23, 2020 at 12:03:38 (UTC)
Goto Top
Hi canlot,

ja, das dachte ich auch, hatte diesen Ansatz zuerst versucht.
Aber da habe ich noch mehr ungelöste Baustellen.

Deshalb würde ich gerne den Weg über ipconfig /all weiter verfolgen.

Gruß

Potshock
Member: colinardo
colinardo Jun 23, 2020 updated at 12:07:15 (UTC)
Goto Top
Servus.
Zitat von @potshock:
Deshalb würde ich gerne den Weg über ipconfig /all weiter verfolgen.
Aua das tut ja in den Augen weh wenn ich das sehe, das ist Powershell kein Batch... face-smile Denk immer daran Powershell arbeitet objektorientiert, das "String-Extrahier-Gedöhns" ist bei der Aufgabe vollkommen überflüssig!
Get-Netadapter | select Name,InterfaceDescription,MacAddress,@{n='IP-Address';e={($_ | Get-NetIPAddress -AddressFamily IPv4).IPAddress -join ","}} | ft -Auto  

Grüße Uwe
Member: potshock
potshock Jun 23, 2020 at 12:23:57 (UTC)
Goto Top
Hi colinardo,

danke, das sieht schon mal sehr vielversprechend aus face-smile.

Werde mich daran versuchen.

Grüße
Potshock
Member: erikro
erikro Jun 23, 2020 at 19:51:28 (UTC)
Goto Top
Moin,

Zitat von @colinardo:
Aua das tut ja in den Augen weh wenn ich das sehe,

Jaaaaaaaa. face-wink So ging's mir auch.
der Aufgabe vollkommen überflüssig!
> Get-Netadapter | select Name,InterfaceDescription,MacAddress,@{n='IP-Address';e={($_ | Get-NetIPAddress -AddressFamily IPv4).IPAddress -join ","}} | ft -Auto  
> 

Cool. Das merke ich mir.

Liebe Grüße

Erik