Skip to content

Instantly share code, notes, and snippets.

@markembling
Created August 24, 2009 13:38
Show Gist options
  • Star 68 You must be signed in to star a gist
  • Fork 38 You must be signed in to fork a gist
  • Save markembling/173887 to your computer and use it in GitHub Desktop.
Save markembling/173887 to your computer and use it in GitHub Desktop.
Powershell script for adding/removing/viewing entries to the hosts file.
#
# Powershell script for adding/removing/showing 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', 'show'."
}
} catch {
Write-Host $error[0]
Write-Host "`nUsage: hosts add <ip> <hostname>`n hosts remove <hostname>`n hosts show"
}
@tylercorelitz
Copy link

Thanks, in my usage doing an add or remove was removing all data. if doing an add the hosts file would be blank except for the added item, if doing a remove all items will be removed. As the first comment states, editing this section of the script to remove the n after hostname, resolved the issue.
} catch {
Write-Host $error[0]
Write-Host "nUsage: hosts add <ip> <hostname>n hosts remove `n hosts show"
}

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