Next up is removing a record from a hosts file
function remove-hostfilecontent { [CmdletBinding()] param ( [parameter(Mandatory=$true)] [ValidatePattern("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")] [string]$IPAddress, [parameter(Mandatory=$true)] [string]$computer ) $file = Join-Path -Path $($env:windir) -ChildPath "system32\drivers\etc\hosts" if (-not (Test-Path -Path $file)){ Throw "Hosts file not found" } Write-Verbose "Remove IP Address" $data = ((Get-Content -Path $file) -notmatch "$ip\s+$computer") $data Set-Content -Value $data -Path $file -Force -Encoding ASCII }
Get an IP Address and computer as before. Create the path to the hosts file.
Read the files contents and perform a –notmatch using the IP Address and computername in the regular expression. \s+ means one or more white spaces. This removes the record we don’t want.
I managed to create a regular expression that works
Then write the data back. normally I wouldn’t look at completely re-writing a file like this but the hosts file is small so its probably as quick and it makes the code really simple.