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-Key: 1462262694

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

Printed on: April 23, 2024 at 06:04 o'clock

Mitglied: 149569
149569 Nov 03, 2021 updated at 15:57:10 (UTC)
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}  
Member: mbehrens
Solution mbehrens Nov 03, 2021 at 16:01:55 (UTC)
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.
Member: akadawa
akadawa Nov 03, 2021 at 16:10:02 (UTC)
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!
Member: akadawa
akadawa Nov 03, 2021 at 16:12:11 (UTC)
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
Mitglied: 149569
Solution 149569 Nov 03, 2021 updated at 16:19:34 (UTC)
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.
Member: akadawa
akadawa Nov 03, 2021 at 16:28:20 (UTC)
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