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-ID: 581298

Url: https://administrator.de/forum/hilfe-bei-powershell-schleife-benoetigt-581298.html

Ausgedruckt am: 22.12.2024 um 11:12 Uhr

canlot
canlot 23.06.2020 um 13:17:54 Uhr
Goto Top
Hi,

mach das doch mit Get-NetAdapter, ist viel einfacher.
potshock
potshock 23.06.2020 um 14:03:38 Uhr
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
colinardo
colinardo 23.06.2020 aktualisiert um 14:07:15 Uhr
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
potshock
potshock 23.06.2020 um 14:23:57 Uhr
Goto Top
Hi colinardo,

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

Werde mich daran versuchen.

Grüße
Potshock
erikro
erikro 23.06.2020 um 21:51:28 Uhr
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