Categories

Remove a host file record

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 Smile



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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>