PowerShell-Skript zum Löschen von Text nach der localhost-Zeile und zum Hinzufügen eines statischen Hostnamens und der aktuellen IP-Adresse zur Datei

551
ra8ul

Der gesamte Text muss nach der Hosthostdatei der Zeile 127.0.0.1 in PowerShell gelöscht werden. letzte Zeile ist der localhost-Eintrag in der Hostdatei. Nach dieser Zeile möchte ich alle Textzeilen löschen, wenn dies möglich ist. Unten ist der Code.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted   $ip = get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1}   $ip.ipaddress[0] $hst = $env:COMPUTERNAME $hostfile = Get-Content "$($env:windir)\system32\Drivers\etc\hosts" if ($hostfile -notcontains "127.0.0.2 hostname1" -and  (-not($hostfile -like "$($ip.ipaddress[0]) $hst"))) { Add-Content -Encoding UTF8 "$($env:windir)\system32\Drivers\etc\hosts" "$($ip.ipaddress[0]) $hst"  } 
1

1 Antwort auf die Frage

0
Kevin K.

Dieses Skript löscht alles danach 127.0.0.1 localhostund speichert es wieder in der Datei. Falls Ihre Bedingungen nicht mehr zutreffen, wird der neue Eintrag eingefügt, bevor die Datei auf die Festplatte zurückgeschrieben wird.

Der Code:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted   $ipAdresses = Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object {$_.IPAddress.length -gt 0} | Select-Object -Property 'IPAddress' -First 1  $ip = $ipAdresses.IPAddress[0] $hst = $env:COMPUTERNAME $hostFilePath = "$($env:windir)\system32\Drivers\etc\hosts" $hostfile = Get-Content -Path $hostFilePath $newHostFileEntry = " " -f $ip, $hst  # Delete all text after what is defined as $matchString $lastIndexOfNewArray = 0 $matchString = '127.0.0.1\s+localhost'  for ($index = 0; $index -lt $hostfile.Count; $index++) { if ($hostfile[$index] -match $matchString) { $lastIndexOfNewArray = $index break } } $newHostFileContent = $Hostfile[0..$lastIndexOfNewArray]  # Adds entry for local IP address if conditions resolve to $true if ($newHostFileContent -notcontains "127.0.0.2 hostname1" -and  (-not($newHostFileContent -like $newHostFileEntry))) { $newHostFileContent = New-Object System.Collections.ArrayList(,$newHostFileContent) $newHostFileContent.Add($newHostFileEntry) > $null }  Out-File -Encoding UTF8 -FilePath $hostFilePath -InputObject $newHostFileContent -Append:$false -Confirm:$false 
Wow Danke, es ist fantastisch, wenn Sie im Powershell-Editor laufen, aber nicht mit der rechten Maustaste auf "Run with Powershell" klicken. Ich mache etwas falsch. Danke nochmal. ra8ul vor 6 Jahren 0
Gibt es eine Art Fehlermeldung? Andernfalls können Sie eine PowerShell öffnen und die Skriptdatei von dort aus starten, um zu sehen, was möglicherweise schief gelaufen ist. Kevin K. vor 6 Jahren 0
Es gibt einen Fehler, wenn ich mit der rechten Maustaste auf Ausführen mit Powershell klicke. Es blinkt rot für eine Millisekunde auf dem Bildschirm, die ich nicht aufnehmen konnte. Das Skript wird jedoch innerhalb des Powershell-Editors fehlerfrei ausgeführt und fügt die Host-Datei ohne Probleme hinzu. Lassen Sie mich wissen, wenn wir den Fehler in der Protokolldatei erfassen können. Ich bin neu bei Powershell. Vielen Dank im Voraus. ra8ul vor 6 Jahren 0
Ok, dann versuchen Sie zuerst eine PowerShell zu öffnen und starten Sie die Skriptdatei von innen. Dadurch sollte das PowerShell-Fenster geöffnet bleiben und Sie können den Fehler feststellen. Kevin K. vor 6 Jahren 0
Dies ist der Fehler, den ich erhalte, wenn ich die Datei in Powershell ausführte ra8ul vor 6 Jahren 0
D: \ UpdateHosstfileip.ps1: Der Begriff 'D: \ UpdateHosstfileip.ps1' wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens oder überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut. An Zeile: 1 Zeichen: 1 + D: \ UpdateHosstfileip.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo: ObjectNotFound: (D: \ UpdateHosstfileip.) ps1: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException ra8ul vor 6 Jahren 0
Es tut mir leid zu fragen, aber ist der Tippfehler `UpdateHosstfileip.ps1` beabsichtigt? Der Fehler weist normalerweise darauf hin, dass die Datei nicht gefunden wurde. Kevin K. vor 6 Jahren 0
Es tut mir leid, dies ist ein Tippfehler. Ich könnte den Befehl ohne Fehler an der Powershell-Eingabeaufforderung ausführen. Ich bekomme jedoch immer noch eine Fehlermeldung, wenn Sie mit der rechten Maustaste auf das Kontextmenü "Run with powershell" klicken. Vielen Dank ra8ul vor 6 Jahren 0
[Der Start einer PowerShell aus einer PowerShell heraus] (https://stackoverflow.com/a/1340661/8179604) mit der Option "-noexit" kann den Fehler möglicherweise verursachen. Andernfalls sollten Sie sicherstellen, dass Ihre Ausführungsrichtlinie die Ausführung von Skripts zulässt. Überprüfen Sie daher 'Get-ExecutionPolicy' und verwenden Sie 'Set-ExecutionPolicy', wie in [Online-Hilfe von Microsoft für Set-ExecutionPolicy] (https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell.security) beschrieben / set-executionpolicy? view = powershell-6) Kevin K. vor 6 Jahren 0