Le script ci-dessous propose de remplacer a distance le contenu du fichier de resolution c:\windows\system32\etc\hosts et d'effectuer un test de resolution des nouveaux noms.
Remote_ModifyHostFiles_And_Test.ps1 (3,61 kb)
# SCRIPT TO MODIFY HOSTS FILE ON TARGET SERVER AND REMOTELY TEST RESOLUTION
Param(
$SrvList = ("Srv1","Srv2"),
$HostFilePath = "C:\Windows\System32\drivers\etc\hosts",
$cred = $(Get-Credential -Credential MyDomain\Me),
$Host1 = "Host1",
$IP1 = "0.0.0.1",
$Host2 = "Host2",
$IP2 = "0.0.0.2"
)
$cred = $(Get-Credential -Credential MyDomain\Me)
# host file
$hostcontent =
"# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
# MY SERVERS
$Host1 $IP1
$Host2 $IP2
"
# FUNCTIONS
function Spec-Ping
{
Param($HostToPing)
Try {
Test-Connection -ComputerName $HostToPing -Count 1 -ErrorAction Stop
}
Catch [System.Net.NetworkInformation.PingException]
{
$pingresult = "PING ERROR TO $HostToPing - CHECK NAME RESOLVING"
}
}
# OPENING WINRM SESSIONS ON MGS SERVERS
$SrvList | foreach {
try
{
New-PSSession -Name $($_.Substring(0,13)) -ComputerName $_ -Credential $cred
}
catch
{
write-host -F red "Erreur lors de la creation de la session Winrm vers $_"
}
}
$sessions = Get-PSSession
Foreach ($sess in $sessions)
{
Invoke-Command -Session $sess -ScriptBlock {Param($hostcontent,$HostFilePath) Set-Content -Path $HostFilePath -value $hostcontent} -ArgumentList $hostcontent,$HostFilePath
}
Write-Host "`n--- PING RESULT:"
Foreach ($sess in $sessions)
{
# First Host Test
$pingresult = Invoke-Command -Session $sess -ScriptBlock ${Function:Spec-Ping} -ArgumentList $Host1
switch -Wildcard ($pingresult.value)
{
"PING ERROR*" {write-host -ForegroundColor red $pingresult.value}
}
Switch ($pingresult.IPV4Address.IPAddressToString)
{
$IP1 {Write-Host "OK -- $Host1 is resolved by "$sess.ComputerName" to $IP1"}
default {Write-Host "KO - Unable to get resolution of $Host1 on"$sess.ComputerName""}
}
# Second Host Test
$pingresult = Invoke-Command -Session $sess -ScriptBlock ${Function:Spec-Ping} -ArgumentList $Host2
switch -Wildcard ($pingresult.value)
{
"PING ERROR*" {write-host -ForegroundColor red $pingresult.value}
}
Switch ($pingresult.IPV4Address.IPAddressToString)
{
$IP2 {Write-Host "OK -- $Host2 is resolved by "$sess.ComputerName" to $IP2"}
default {Write-Host "KO - Unable to get resolution of $Host2 on"$sess.ComputerName""}
}
}
#Remove Pssessions
Remove-PSSession *