none
String kürzen RRS feed

  • Frage

  • Hallo,

    ich habe eine IP Adresse die ich gerne ab dem letzten "." abschneiden möchte um das Netz zu ermitteln.

    $Computername = "PC160001"
    $ipAddresses = [System.Net.Dns]::GetHostAddresses($Computername) | %{$_.IPAddressToString}
    $split = $ipAddresses.split(".")
    $_IP = $split[0] + "." + $split[1] + "." + $split[2]
    $_IP

    Funktion prima. Gibt es einen einfacheren Weg ?

    Liebe Grüße

    Norbert


    IT Berater

    Dienstag, 16. Februar 2016 15:41

Antworten

Alle Antworten

  • Hi,

    du könntest das Netz mit Regex ermitteln. Ist zwar nicht unbedingt einfacher, aber ein Weg.

    $regex = "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\b"
    $test = ($ip  | Select-String -Pattern $regex | % { $_.Matches } )
    
    $test.Value

    Gruß

    Christian


    Christian Groebner MVP Forefront

    Dienstag, 16. Februar 2016 21:52
  • Ich weiß nicht, wie exakt die Daten sein müssen. IP Adressen als Strings zu behandeln, hat oft nicht das gewünschte Ergebnis erzielt, weswegen wir in AutomatedLab für solche Themen einige Funktionen gebaut haben:

    PS C:\> Get-NetworkSummary -IPAddress 192.168.30.110 -SubnetMask 225.225.225.224
    
    
     Network    : 192.160.0.96
     Broadcast  : 222.190.30.127
     Range      : 192.160.0.97 - 222.190.30.126
     Mask       : 225.225.225.224
     MaskLength : 15
     Hosts      : 505290270
     Class      : C
     IsPrivate  : True

    Die Funktion kann Du Dir hier nebst anderen kopieren: http://automatedlab.codeplex.com/SourceControl/latest#AutomatedLab-3.7/AutomatedLabWorker/AutomatedLabWorkerInternals.psm1


    -Raimund

    Dienstag, 16. Februar 2016 22:12
  • Hallo,

    um nur alles nach dem letzten Punkt abzuschneiden, kannst du auch folgendes machen:

    $a = $a -replace "\.[^\.]*"

    Mit dem [\.] suchst du nach allen Zeiten, die kein Punkt sind. Damit ist sichergestellt, dass es auch wirklich der letzte Punkt ist.

    Inhaltlich ist aber sicher Raimunds spezielle Funktion vorzuziehen.

    Mittwoch, 17. Februar 2016 07:43
  • $a = "192.168.178.21"
    $a = $a -replace "\.[^\.]*"
    $a 
    Ich bekomme 192 als Ergebnis. Mache ich was falsch?

    IT Berater

    Mittwoch, 17. Februar 2016 11:05
  • Entschuldigung, mein Fehler. Da fehlt noch ein Dollar-Zeichen am Ende, um auch das Stringende zu garantieren.
    $a = "192.168.178.21"
    $a = $a -replace "\.[^\.]*$"
    $a 

    Mittwoch, 17. Februar 2016 11:21
  • sehr brauchbar, danke!
    Mittwoch, 17. Februar 2016 13:15
  • >P Adressen als Strings zu behandeln, hat oft nicht das gewünschte Ergebnis
     
    Steile These, Raimund. :)  Was spricht gegen Strings? Das Objekt das das verlinkte Script erzeugt, enthält ebenfalls nur Strings...

    @NCB2009

    Zur Umwandlung hast du ja schon zwei brauchbare Methoden. Allerdings ist noch ein pontentielles Problem im Rest deines Scriptes. Das funktioniert so nur, insofern nur eine einzige v4 - IP im System vergeben ist. Bei mehreren Adaptern und/oder aktiviertem IPv6 ist das Resultat nämlich ein Array von Adressen. Hier gilt es dann erst noch die gewünschte auszufiltern.

     
    Grüße, Denniver



    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Mittwoch, 17. Februar 2016 15:12
    Moderator
  • Was gegen Strings spricht, verdeutlicht das Beispiel oben. Ist das Löschen des letzten Bytes ausreichend, um die Netzwerk Adresse von z.B. 192.168.10.60 herausfinden? Das kann die 192.168.10.0 sein, aber auch 192.168.10.48, oder die 192.168.10.32.

    Zuverlässig IPs mit String Funktionen zu verarbeiten, halte ich für eine steilere These.

    Und ja, die Funktion gibt ein Objekt zurück, das Strings enthält, weil nun mal IP Adressen als Integer schwer zu lesen sind. Intern weredn die IP Adressen als UInt32 behandelt.


    -Raimund


    Mittwoch, 17. Februar 2016 17:42
  • Du hast mich missverstanden. Die Frage war, warum das was der OP machen möchte mit der Ausgabe des von dir verlinkten Scripts besser klappen sollte.

    Insofern ich ein Muster als IP-Adresse sicher erkannt habe, kann man dieses ebenso sicher und fehlerfrei weiterverarbeiten.

    Edit: Kann es sein, was du eigentlich infrage stellen willst, ist die vom OP angenommene Methode: "[...] ab dem letzten "." abschneiden möchte um das Netz zu ermitteln."?
    Das wäre absolut legitim, da gibt es bessere Methoden. Aber daraus ein allgemeines "IP-Adressen darf man nicht als String behandeln" zu machen,  ist nicht wirklich hilfreich.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Mittwoch, 17. Februar 2016 21:05
    Moderator