function Remove-HostsFileEntry { <# .SYNOPSIS Returns all hosts file entries as a list of objects of the format: A list of records of the format @{ Keep = $false; IpAddress = $null; Hostname = $null; Comment = $null; BlankLine = $false; } .PARAMETER IpAddress The IP Address of the relevant hosts entry .PARAMETER Hostname The hostname of the relevant hosts entry .PARAMETER Force Because some records are marked with the word keep to not be deleted .OUTPUTS A list of records of the format @{ Keep = $false; IpAddress = $null; Hostname = $null; Comment = $null; BlankLine = $false; } #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string]$IpAddress, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string]$Hostname, [switch]$Force ) $logLead = Get-LogLeadName $records = Get-HostsFileAllRecords $removedRecords = $records.Where({($_.IpAddress -eq $IpAddress) -and ($_.Hostname -eq $Hostname)}) foreach ($record in $removedRecords) { Write-Host "$logLead : Removing: $(Format-HostsFileRecord -Record $record)" } $updatedRecords = $records.Where({!(($_.IpAddress -eq $IpAddress) -and ($_.Hostname -eq $Hostname))}) $keepRecords = $removedRecords.Where({$_.Keep}) if (!(Test-IsCollectionNullOrEmpty $keepRecords)) { if ($Force) { Write-Warning "$logLead : Skipping the following keep records" } else { Write-Warning "$logLead : Found Keep records in the remove-requested records. Re-adding to the updated records list. Use -Force to override." } $updatedKeepRecords = @() foreach ($record in $keepRecords) { $formattedRecord = Format-HostsFileRecord -Record $record if ($Force) { Write-Host "$logLead : Removing, not keeping: [$formattedRecord]" } else { Write-Host "$logLead : Keeping: [$formattedRecord]" $newRecord = @{ Keep = $false; IpAddress = $null; Hostname = $null; Comment = $formattedRecord; BlankLine = $false; } $updatedKeepRecords += $newRecord } } $updatedRecords += $updatedKeepRecords } if ($removedRecords.Count -gt 0) { Write-Host "$logLead : Removing: $removedRecordsCount records" Save-CompleteHostsFile -Record $updatedRecords } else { Write-Warning "$logLead : No records found to remove" } }