none
Zeile in etc\hosts Datei löschen RRS feed

  • Frage

  • Hallo Community,

    ich benötige ein Script um eine Zeile in der hosts Datei zu löschen. Meine Vorgehensweise löscht allerdings den gesamten Content in der Datei. Kann mir hier jemand helfen, bin völliger Anfänger was PS betrifft, hier mein derzeitiger Versuch

    # Variablen definieren
        $file="C:\Windows\System32\drivers\etc\hosts"
        $string= "169.0.0.1   setup.xxxx.at"
        #$inhalt = Select-String -Path $file -Pattern $string
    # Schleife
        ForEach ($string in $file) {
            Clear-Content $string}

    Grüße, Rene


    • Bearbeitet Rene A Dienstag, 3. März 2015 12:08
    Dienstag, 3. März 2015 12:07

Antworten

  • Hallo Rene, ich werde dir jetzt mal nicht direkt die Antwort verraten sondern erst mal nur ein paar Lösungshinweise geben. Deine Aufgabe ist nicht sehr schwer und du hast deutlich mehr davon, wenn du es selbst raus bekommen hast. Wenns nicht klappt, bekommst du natürlich die Lösung. :)

    Der Lösungsweg muß also in etwa folgendermaßen aussehen (nötige Befehle in Klammern):

    Die Grundidee ist, die alte Hosts einzulesen und ohne den zu löschenden Text neu aufzubauen.

    • Variablen definieren, Hostspfad und Löschtext. (Hast du schon)
    • Inhalt der Hosts-Datei einlesen. (Get-Content)
    • Den Inhalt Zeile für Zeile durchgehen (Foreach(){}),
    • jede Zeile mit deinem Löschtext vergleichen. Regex wäre hier am besten, bei der Hosts geht auch ein "-ne". ( If ( -ne ) {} ),
    • wenn Zeile nicht gleich Löschtext, dann füge Zeile zu neuer Hostsdatei hinzu ( $newhosts = ....),
    • Am Schluss: Ausgabe der neuen Hosts in die Datei (out-file)
       
      Versuchs mal.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher 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.


    Dienstag, 3. März 2015 12:44
    Moderator

Alle Antworten

  • Hallo Rene, ich werde dir jetzt mal nicht direkt die Antwort verraten sondern erst mal nur ein paar Lösungshinweise geben. Deine Aufgabe ist nicht sehr schwer und du hast deutlich mehr davon, wenn du es selbst raus bekommen hast. Wenns nicht klappt, bekommst du natürlich die Lösung. :)

    Der Lösungsweg muß also in etwa folgendermaßen aussehen (nötige Befehle in Klammern):

    Die Grundidee ist, die alte Hosts einzulesen und ohne den zu löschenden Text neu aufzubauen.

    • Variablen definieren, Hostspfad und Löschtext. (Hast du schon)
    • Inhalt der Hosts-Datei einlesen. (Get-Content)
    • Den Inhalt Zeile für Zeile durchgehen (Foreach(){}),
    • jede Zeile mit deinem Löschtext vergleichen. Regex wäre hier am besten, bei der Hosts geht auch ein "-ne". ( If ( -ne ) {} ),
    • wenn Zeile nicht gleich Löschtext, dann füge Zeile zu neuer Hostsdatei hinzu ( $newhosts = ....),
    • Am Schluss: Ausgabe der neuen Hosts in die Datei (out-file)
       
      Versuchs mal.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher 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.


    Dienstag, 3. März 2015 12:44
    Moderator
  • Hallo Denniver,


    DANKE für deine Antwort! Ich habe es mittlerweile über replace umgesetzt

    # Variablen
        $file = "C:\Windows\System32\drivers\etc\hosts"
        $string = "169.0.0.1   xxxxxxxxxx"
        $inhalt = Select-String -Path $file -Pattern $string
    
    # Schleife
        if ($inhalt) {
            $output = Get-Content $file | Foreach-Object {
            $_ -Replace '(   xxxxxxxxxx)', '' -Replace '169.0.0.1', ''}  
            $output > $file}

    Richtig sauber finde ich diese Lösung aber nicht und werde mir wenn ich Zeit habe nochmal deinen Vorschlag zu Gemüte führen.

    Grüße, Rene


    Donnerstag, 5. März 2015 12:09