Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

It'd be cool to have a PowerShell script to pull the latest copy periodically. #28

Closed
marknoble opened this issue Oct 1, 2015 · 8 comments

Comments

@marknoble
Copy link

No description provided.

@StevenBlack
Copy link
Owner

Feel free to submit one!

The permanent location is
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

@Sadi58
Copy link

Sadi58 commented Feb 4, 2016

Something like this one? ;-)
https://github.com/gaenserich/hostsblock

@matijagrcic
Copy link

matijagrcic commented Feb 13, 2016

Here you go.

$hostsRequest = (Invoke-Webrequest -Uri "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts")
$currentDate = ((get-date).ToUniversalTime()).ToString("dd-MM-yyyy hh-mm-ss")
$filePath = "C:\Windows\System32\drivers\etc\host-{0}.{1}"

if($hostsRequest.StatusCode -eq 200){
    $captureDomainRegex = "^(?:\d{1}\.\d{1}\.\d{1}.\d{1} )(.+)"
    $hosts = [PsCustomObject]@{unique=@(); duplicate=@();}

    $hostsRequest.Content | out-file -filepath ($filePath -f $currentDate, "txt")

    foreach ($line in Get-Content ($filePath -f $currentDate, "txt")){
        if($line -match $captureDomainRegex) {
            if($hosts.unique -contains $matches[1]){
                $hosts.duplicate += $matches[1]
            }else{
                $hosts.unique += $matches[1]
            }
        }
    }
    ConvertTo-Json $hosts | out-file -filepath ($filePath -f $currentDate, "json")
}

#load json and get the count of unique entries 
#(Get-Content ($filePath -f $currentDate, "json") | ConvertFrom-Json).unique.Count

This would create host.txt wherever your path is set to, then it will read that file and create
host.json with the following structure

{
    "unique":  [
                   "0koryu0.easter.ne.jp",
                   "1-atraffickim.tf",
                   "10-trafficimj.tf",
                   "109-204-26-16.netconnexion.managedbroadband.co.uk",
                   "11-atraasikim.tf",
                   "11.lamarianella.info",
                   "12-tgaffickvcmb.tf",
                   "13-ctscfficim.tf",
                   "alsoknowsit.com"
               ],
    "duplicate":  [
                      "11-atraasikim.tf",
                      "11.lamarianella.info"
                  ]
}

Gist

@msenturk
Copy link

This one seems to work for me. You can run it with task scheduler for periodically updates.

# Create temp folder..
New-Item -ItemType Directory -Force -Path 'C:\Hosts\'
Set-Location C:\Hosts\
wget 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts' -OutFile hosts
# Clean up and remove dublicates ..
Get-Content hosts | Where { $_ -notmatch "\#" } | Where {$_.trim() -ne " " } | Sort-Object -Unique | Set-Content final
# Back-up and Update hostsfile..
Copy-Item -Recurse "C:\Windows\System32\drivers\etc\hosts" -Destination "C:\Windows\System32\drivers\etc\hosts.bak"
Copy-Item -Recurse ".\final" -Destination "C:\Windows\System32\drivers\etc\hosts"
# FlushDNS..
CMD.EXE /C "ipconfig /flushdns" 
Write-Host "`nHosts File Updated" -ForegroundColor Green
rm .\final -Recurse

Gist

@sn0wf1ake1
Copy link

$hosts = "$env:windir\System32\drivers\etc\hosts"
$hosts_custom = "C:\Users\XXXXXX\OneDrive\hosts.custom.txt"

Invoke-WebRequest -Uri https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -OutFile $hosts
if (Test-Path -Path $hosts_custom) {Get-Content $hosts_custom | Add-Content -Path $hosts}
C:\WINDOWS\system32\cmd.exe /C C:\WINDOWS\system32\ipconfig /flushdns

@ScriptTiger
Copy link
Contributor

Does it count if it's not PowerShell?

https://github.com/ScriptTiger/Unified-Hosts-AutoUpdate

@elico
Copy link

elico commented Mar 25, 2018

@Sn0wflake Invoke-WebRequest works only from a specific version of powershell and I have seen that on Windows Server 2008 it doesn't by default.

@StevenBlack
Copy link
Owner

Closing this now. This is an old issue, and Windows is too fragmented. Folks are of course free to automate their own workflows.

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

No branches or pull requests

8 participants