Aujourd’hui, un petit script pour résoudre une question simple mais fastidieuse quand on a plusieurs centaines de serveurs à gérer.
La donnée est la suivante: J’ai besoin de récupérer les serveurs DNS paramétrés de chaque serveur Windows dans l’environnement. J’ai une liste de nom d’hôtes à disposition. Autrement, il est également possible de récupérer la liste directement depuis votre serveur DNS pour autant que celui-ci soit correctement organisé, mais ce n’est pas le sujet de cet article.
Ce script va interroger chaque serveur dans le fichier winsrv.txt (un serveur par ligne) et récupérer par WMI l’adresse IP du serveur, l’ordre de recherche DNS (qui fourni donc la liste des serveurs DNS dans l’ordre), et le status du client DHCP.
Le résultat est un fichier CSV appelé result.txt qu’il sera facile de traiter dans Excel.
# Clear the display
Clear-Host
# Get list of hosts
$servers = Get-Content 'winsrv.txt'
# Define column headers
$result="hostname;ipaddress;dnssearchorder;DHCPEnabled"
$result | Out-File result.txt
# Loop through each host
ForEach ($server in $servers) {
# Get Network configuration details from the host
$details = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $server
# Add hostname to the result string
# $result=$result+"$server;"
$result="$server;"
# Add host IP address to the result string
$string=$($details.IPAddress| where {$_ -notmatch ":"})+";"
$result=$result+$string
# Add host DNS search order to the result string
$string=($($details.DNSServerSearchOrder) -as [string])+";"
$result=$result+$string
# Add host DNS search order to the result string
$string=($($details.DHCPEnabled) -as [string])
$result=$result+$string
# Write host result in text file
$result | Out-File result.txt -Append
}