Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Powershell script for adding/removing/viewing entries to the hosts file.
#
# Powershell script for adding/removing entries to the hosts file.
#
# Known limitations:
# - does not handle entries with comments afterwards ("<ip> <host> # comment")
#
$file = "C:\Windows\System32\drivers\etc\hosts"
function add-host([string]$filename, [string]$ip, [string]$hostname) {
remove-host $filename $hostname
$ip + "`t`t" + $hostname | Out-File -encoding ASCII -append $filename
}
function remove-host([string]$filename, [string]$hostname) {
$c = Get-Content $filename
$newLines = @()
foreach ($line in $c) {
$bits = [regex]::Split($line, "\t+")
if ($bits.count -eq 2) {
if ($bits[1] -ne $hostname) {
$newLines += $line
}
} else {
$newLines += $line
}
}
# Write file
Clear-Content $filename
foreach ($line in $newLines) {
$line | Out-File -encoding ASCII -append $filename
}
}
function print-hosts([string]$filename) {
$c = Get-Content $filename
foreach ($line in $c) {
$bits = [regex]::Split($line, "\t+")
if ($bits.count -eq 2) {
Write-Host $bits[0] `t`t $bits[1]
}
}
}
try {
if ($args[0] -eq "add") {
if ($args.count -lt 3) {
throw "Not enough arguments for add."
} else {
add-host $file $args[1] $args[2]
}
} elseif ($args[0] -eq "remove") {
if ($args.count -lt 2) {
throw "Not enough arguments for remove."
} else {
remove-host $file $args[1]
}
} elseif ($args[0] -eq "show") {
print-hosts $file
} else {
throw "Invalid operation '" + $args[0] + "' - must be one of 'add', 'remove'."
}
} catch {
Write-Host $error[0]
Write-Host "`nUsage: hosts add <ip> <hostname>`n hosts remove <hostname>`n hosts show"
}
@lee7ster

This comment has been minimized.

Copy link

@lee7ster lee7ster commented Oct 16, 2013

for removing a host, if you simply append a `n at the end of each line, then just write out the newLines as a text, it saves exponential work compared to simply writing over the files n times (# of lines)! I only noticed it got really slow since my host file has many, many lines from spybot entries, but though it'd speed it up for some other people too :)

@ozzy432836

This comment has been minimized.

Copy link

@ozzy432836 ozzy432836 commented Feb 21, 2017

very useful thanks. Using it to auto create IIS sites, app pools, dirs and host files

@nikitozeg

This comment has been minimized.

Copy link

@nikitozeg nikitozeg commented Dec 25, 2018

how to execute proper function?

@DiamondDemon669

This comment has been minimized.

Copy link

@DiamondDemon669 DiamondDemon669 commented Jul 30, 2020

gonna be using this on Domainiac as part of the app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment