Private/Hosts/New-HostsEntry.ps1

<#
  .SYNOPSIS
    Creates an entry in the HOSTS file.
  
  .PARAMETER Hostname
    The hostname to create.
  .PARAMETER IPAddress
    The IP address to map.
  .PARAMETER Hosts
    The path to the hosts file.
#>

Function New-HostsEntry {
  [CmdletBinding(SupportsShouldProcess = $true)]
  Param(
    [Parameter(Position = 1, Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$Hostname
    ,
    [Parameter(Position = 2, Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$IPAddress
    ,
    [Parameter(Position = 3)]
    [ValidateScript({ Test-Path $_ -PathType "Leaf" })]
    [string]$Hosts = (Join-Path $env:windir -ChildPath "System32\drivers\etc\hosts")
  )
  Process {
    $existing = Get-HostsEntry $Hostname -Hosts $Hosts
    If (($existing -ne $IPAddress) -and $PSCmdlet.ShouldProcess($Hosts, "Add $($IPAddress) $($Hostname)")) {
      "$($IPAddress)`t$($Hostname)" | Add-Content $Hosts
    }
  }
}