Atualizando Arquivos Hosts Remotamente
Hoje tive a necessidade de incluir algumas URLs nos arquivos Hosts das máquinas, pois muitos utilizam o “Cisco VPN Client” que altera a ordem de consulta dos sufixos DNS, causando assim alguns problemas com Outlook por exemplo. Mas como fazer isso?
Este script é muito simples, ele simplesmente lê o arquivo remotamente de cada Computador do AD, carrega na memória, procura se o FQDN existe, e se não existir inclui, isso simplesmente não causa problemas para o usuário caso ele tenha incluído algum endereço.
Para utilizar basta substituir os valores nas últimas linhas pelo que deseja adicionar.
Ex:
Desejo adicionar o FQDN site.teste.com.br com o IP 10.0.0.1
add-host $file 10.0.0.1 site.teste.com.br
Write-Host "Add 10.0.0.1 site.teste.com.br on $maq"
OBS: Para que o script funcione você precisa executar com privilégios administrativos.
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
}
}
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]
}
}
}
$Comp = Get-ADComputer -SearchBase "OU=Computers,DC=domain,DC=net" -Filter *
foreach ($Computer in $Comp)
{
$maq = $Computer.name
$file = "\$maq\c$\windows\system32\Drivers\etc\hosts"
$adminpath = Test-Path "\$maq\admin$"
If ($adminpath -eq "True")
{
Write-Host "$maq\admin$ is OK"
add-host $file 192.168.1.1 mail.domain.net
Write-Host "Add 192.168.1.1 mail.domain.net on $maq"
add-host $file 192.168.1.2 sip.domain.net
Write-Host "Add 192.168.1.2 sip.domain.net on $maq"
}
}