akadawa
Goto Top

Powershell String zu Array hinzufügen

Hallo Community,

ich schreibe gerade ein Powershell-Script, welches aus einer CSV IP-Adressen filtert und in ein Array schreiben soll.
Leider gelingt mir das nicht, wenn ich es wie folgt schreibe
 $ipAdresse += ExtractValidIPAddress $item 
beinhaltet die variable $ipAdresse = 192.168.178.12192.168.178.17192.168.178.12192.168.178.19. Ich würde aber gerne die IP-Adressen getrennt in einem Array haben.


Nachdem ich mich etwas "durchgegooglet" habe, habe ich immer noch kein Lösungsansatz.
Könnte mir jemand auf die Sprünge helfen?

Das komplette Script:
Function ExtractValidIPAddress($String){
    $IPregex=‘(?<Address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))’
    If ($String -Match $IPregex) {$Matches.Address}
}

$dcLog = Import-Csv -Path "C:\Temp\logonAdministrator_DC1.csv" -Encoding UTF8 -Delimiter ";"  


foreach($item in $dcLog.Message){
    $ipAdresse += ExtractValidIPAddress $item
    #(Resolve-DnsName (ExtractValidIPAddress $item ) -ErrorAction SilentlyContinue).NAMEHOST

}

Content-ID: 1462262694

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

Ausgedruckt am: 15.11.2024 um 05:11 Uhr

149569
149569 03.11.2021 aktualisiert um 16:57:10 Uhr
Goto Top
Bevor du einen Eintrag zu einem Array hinzufügst musst du erst mal das Array vorher erstellen
$ipAdresse = @()
Aber das Hinzufügen via += ist bei Array braucht intern viel Ressourcen weil für jeden neuen Eintrag der Speicher neu alloziert werden muss.
Besser wäre alles gleich in einem Rutsch einem Array zuzuweisen
$ipadressen = Import-Csv -Path "C:\Temp\logonAdministrator_DC1.csv" -Encoding UTF8 -Delimiter ";"  | %{ExtractValidIPAddress $_.Message}  
mbehrens
Lösung mbehrens 03.11.2021 um 17:01:55 Uhr
Goto Top
Zitat von @akadawa:

ich schreibe gerade ein Powershell-Script, welches aus einer CSV IP-Adressen filtert und in ein Array schreiben soll.
Leider gelingt mir das nicht, wenn ich es wie folgt schreibe
 $ipAdresse += ExtractValidIPAddress $item 
beinhaltet die variable $ipAdresse = 192.168.178.12192.168.178.17192.168.178.12192.168.178.19. Ich würde aber gerne die IP-Adressen getrennt in einem Array haben.

Irgendwie kann ich keine Deklaration eines Arrays entdecken.
akadawa
akadawa 03.11.2021 um 17:10:02 Uhr
Goto Top
Ich habe das Script folgendermaßen angepasst:
Function ExtractValidIPAddress($String){
    $IPregex=‘(?<Address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))’
    If ($String -Match $IPregex) {$Matches.Address}
}

$dcLog = Import-Csv -Path "C:\Temp\logonAdministrator_DC1.csv" -Encoding UTF8 -Delimiter ";"  
#$ipadressen = Import-Csv -Path "C:\Temp\logonAdministrator_DC1.csv" -Encoding UTF8 -Delimiter ";"  | %{ExtractValidIPAddress $_.Message} 

foreach($item in $dcLog.Message){
    $ipAdresse = @()
    $ipAdresse += ExtractValidIPAddress $item
    #(Resolve-DnsName (ExtractValidIPAddress $item ) -ErrorAction SilentlyContinue).NAMEHOST

}
Wenn ich jetzt $ipAdresse ausgebe, bekomme ich folgendes:
PS U:\> $ipAdresse
192.168.178.12

PS U:\> $ipAdresse
192.168.178.12

PS U:\> $ipAdresse[1]

PS U:\> 
$ipAdresse scheint ein Array zu sein, hat aber nur einen Wert.
Auch wenn du mir eine sehr gute Lösung geboten hast, warum ist das so?
Wäre für zukünftige arbeiten wichtig.


$ipadressen = Import-Csv -Path "C:\Temp\logonAdministrator_DC1.csv" -Encoding UTF8 -Delimiter ";"  | %{ExtractValidIPAddress $_.Message}  
Dein Tipp mit der unteren Codezeile hat einwandfrei geklappt.

Danke!
akadawa
akadawa 03.11.2021 um 17:12:11 Uhr
Goto Top
Zitat von @mbehrens:

Zitat von @akadawa:

ich schreibe gerade ein Powershell-Script, welches aus einer CSV IP-Adressen filtert und in ein Array schreiben soll.
Leider gelingt mir das nicht, wenn ich es wie folgt schreibe
 $ipAdresse += ExtractValidIPAddress $item 
beinhaltet die variable $ipAdresse = 192.168.178.12192.168.178.17192.168.178.12192.168.178.19. Ich würde aber gerne die IP-Adressen getrennt in einem Array haben.

Irgendwie kann ich keine Deklaration eines Arrays entdecken.

Selbst mit Deklaration enthält das Array nur ein Value
149569
Lösung 149569 03.11.2021 aktualisiert um 17:19:34 Uhr
Goto Top
Zitat von @akadawa:
foreach($item in $dcLog.Message){
$ipAdresse = @()
$ipAdresse += ExtractValidIPAddress $item
#(Resolve-DnsName (ExtractValidIPAddress $item ) -ErrorAction SilentlyContinue).NAMEHOST

}

Selbst mit Deklaration enthält das Array nur ein Value
Denk einfach mal etwas nach. Die initiale Deklaration des Arrays musst du außerhalb der Schleife machen denn sonst initialisierst du das Array ja bei jedem Durchlauf immer wieder neu somit hat es am Ende immer nur eine IP face-wink.
akadawa
akadawa 03.11.2021 um 17:28:20 Uhr
Goto Top
Zitat von @149569:

Zitat von @akadawa:
foreach($item in $dcLog.Message){
$ipAdresse = @()
$ipAdresse += ExtractValidIPAddress $item
#(Resolve-DnsName (ExtractValidIPAddress $item ) -ErrorAction SilentlyContinue).NAMEHOST

}

Selbst mit Deklaration enthält das Array nur ein Value
Denk einfach mal etwas nach. Die initiale Deklaration des Arrays musst du außerhalb der Schleife machen denn sonst initialisierst du das Array ja bei jedem Durchlauf immer wieder neu somit hat es am Ende immer nur eine IP face-wink.

Oh man, danke! :D