Войти

Показать полную графическую версию : [решено] Смена DNS только на активном сетевом интерфейсе.


Anton04
27-11-2012, 11:54
Здравствуйте.

Нужен vbs скрипт для смены/замены DNS только на активном сетевом интерфейсе. Подразумевается, что название активного сетевого интерфейса неизвестно. Работать скрипт должен в Win XP/7.

Данное задание напоминает топик Смена адресов DNS на всех компах в домене (http://forum.oszone.net/post-665554.html), но предложенный там вариант не совсем подходит, а именно нужно смена dns только на текущем (активном) интерфейсе, не затрагивая остальные интерфейсы (GPO не предлагать, т.к. скрипт планируется запускать не только в доменной структуре).

P.S. В интернете есть множество примеров скриптов но полностью отвечающего такому запросу не нашёл:

Change DNS and WINS on Remote Machines (VB Script) (http://www.freevbcode.com/ShowCode.asp?ID=4886)
Изменить список DNS серверов (скрипт) (http://kovanev.net/faq/vbs/159-dns)
Смена шлюза и DNS скриптом (http://adm-alexus.livejournal.com/58259.html)
CONFIGURATION IP ALTERNATIVE AVEC DHCP ACTIF (ALTERNATE IP) (http://www.vbfrance.com/codes/CONFIGURATION-IP-ALTERNATIVE-AVEC-DHCP-ACTIF-ALTERNATE-IP_41427.aspx) - хоть и совсем не то, но тоже интересный вариант.
:flag:

Iska
27-11-2012, 13:08
Anton04, расскажите, что отличает «текущий (активный) сетевой интерфейс» от прочих.

Anton04
27-11-2012, 13:26
что отличает «текущий (активный) сетевой интерфейс» от прочих. »

Активный сетевой интерфейс это тот на котором, на данный момент времени, установлено соединение (поднят линк), т.е. подключен к свичу/wi-fi или другому сетевому оборудованию .

Iska
27-11-2012, 15:45
Тогда почему:
Данное задание напоминает топик Смена адресов DNS на всех компах в домене (http://forum.oszone.net/post-665554.html), но предложенный там вариант не совсем подходит, а именно нужно смена dns только на текущем (активном) интерфейсе, не затрагивая остальные интерфейсы »
не подходит? Там ведь есть:
"Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE"

Anton04
27-11-2012, 16:04
не подходит? »

Честно, как то попытался его запустить не заработал, а в самом коде я профан. Если не трудно подредактируйте тот скрипт под текущую задачу?

Iska
28-11-2012, 03:57
Если речь про это:

http://img24.imageshack.us/img24/6231/image00120121128025711.png

то, можно, например, так:
Option Explicit

Dim objSWbemObjectEx

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
For Each objSWbemObjectEx In .ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'")
With objSWbemObjectEx
WScript.Echo "[" & .Index & "]", .Description, "(" & .MACAddress & ")", .SettingID

If .SetDNSServerSearchOrder(Array("192.168.224.2", "192.168.224.3", "192.168.224.4", "192.168.224.5")) = 0 Then
WScript.Echo "Successfully assign DNS server(s) to connection"
Else
WScript.Echo "Can't assign DNS server(s) to connection"
End If
End With

Exit For
Next
End With

WScript.Quit 0

Если Вам помимо того ещё и статику задавать надо, то: Script Assign a Static IP Address (http://gallery.technet.microsoft.com/scriptcenter/8979c752-8288-4a18-b5ed-f3b79f013f4a).

Anton04
28-11-2012, 10:30
Если речь про это: »

Ну это одно и тоже что и на первой закладке, так что конечно пойдёт!

то, можно, например, так: »

Только вод вывод сообщений вообще не нужен, а так работает идеально. :bow:
Что нужно закомментировать чтобы убрать вывод сообщений?

Если Вам помимо того ещё и статику задавать »

Нет, статику трогать не надо, только DNS.

Iska
28-11-2012, 11:08
Ну это одно и тоже что и на первой закладке, …»
Отчасти. На первой вкладке можно задать не более двух.

Только вод вывод сообщений вообще не нужен, а так работает идеально.
Что нужно закомментировать чтобы убрать вывод сообщений? »
1. Поставить символ апострофа «'» перед обеими «WScript.Echo "…"».
2. Просто удалить строки с «WScript.Echo "…"».
3. Указывать параметром скрипта при его запуске параметр пакетной обработки «//b».

Anton04
28-11-2012, 11:14
Iska,

Ещё раз огромное спасибо. Решение более чем устраивает.

Удачи Вам.

atx
28-10-2014, 13:02
Можно подниму тему.

В компании сменился PDC, старый адрес DNS скоро будет неактивен, нужно на всех серверах со статикой прописать обновленный DNS.

1. Нужно поменять только 2й DNS на определенных серверах. В том числе и на домен контроллерах.
2. Нужно поменять оба DNS
3. Есть некоторое количество машин со статикой, на W7, там тоже надо поменять

Какой кусок скрипта нужно использовать по ссылке выше? Как скормить скрипту список серверов? Только для активного адаптера.

atx
28-10-2014, 16:45
Я пробую отсюда
http://kunaludapi.blogspot.co.uk/2013/06/change-dns-ip-address-remotely-on.html

И пока смог поменять только на одном серваке, с указанием конкретного сетевого адаптера и обоих DNS.
А надо что бы менялся на любом активном адаптере и так же только 2й DNS...

atx
29-10-2014, 10:56
Собственно разобрался сам. Скрипт на PowerShell.
В файл servers.txt заносим имена целевых машин, в коде меняем путь, если это необходимо.
Скрипт меняет DNS на активном сетевом интерфейсе.

Код для смены обоих DNS

$Computerlist = get-content "C:\servers.txt"

foreach ($computername in $computerlist)
{$result = get-wmiobject win32_pingstatus -filter "address='$computername'"

if ($result.statuscode -eq 0)

{
$DNSlist = $(get-wmiobject win32_networkadapterconfiguration -computer $computername -Filter ‘IPEnabled=true’).dnsserversearchorder
$priDNS = $DNSlist | select-object -first 1
$dnsservers =@("192.168.0.1","192.168.0.2")
Write-host "Changing DNS IP's on $computername" -b "Yellow" -foregroundcolor "black"
$remoteNic = get-wmiobject -class win32_networkadapter -computer $computername | where-object {$_.netconnectionID -eq "Ethernet"}
$index = $remotenic.index
$change = get-wmiobject win32_networkadapterconfiguration -computer $computername | where-object {$_.IpEnabled -match "True"}
$change.SetDNSServerSearchOrder($DNSservers) | out-null
$changes = $(get-wmiobject win32_networkadapterconfiguration -computer $computername -Filter ‘IPEnabled=true’).dnsserversearchorder
Write-host "$computername's Dns IP $changes"
}

else

{
Write-host "$Computername is down cannot change IP address" -b "Red" -foregroundcolor "white"
}

}


Код для замены только Secondary DNS

$Computerlist = get-content "C:\servers.txt"

foreach ($computername in $computerlist)
{$result = get-wmiobject win32_pingstatus -filter "address='$computername'"

if ($result.statuscode -eq 0)

{
$DNSlist = $(get-wmiobject win32_networkadapterconfiguration -computer $computername -Filter ‘IPEnabled=true’).dnsserversearchorder
$priDNS = $DNSlist | select-object -first 1
$dnsservers =@($priDNS,"192.168.0.2")
Write-host "Changing DNS IP's on $computername" -b "Yellow" -foregroundcolor "black"
$remoteNic = get-wmiobject -class win32_networkadapter -computer $computername | where-object {$_.netconnectionID -eq "Ethernet"}
$index = $remotenic.index
$change = get-wmiobject win32_networkadapterconfiguration -computer $computername | where-object {$_.IpEnabled -match "True"}
$change.SetDNSServerSearchOrder($DNSservers) | out-null
$changes = $(get-wmiobject win32_networkadapterconfiguration -computer $computername -Filter ‘IPEnabled=true’).dnsserversearchorder
Write-host "$computername's Dns IP $changes"
}

else

{
Write-host "$Computername is down cannot change IP address" -b "Red" -foregroundcolor "white"
}

}




© OSzone.net 2001-2012