Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Смена DNS только на активном сетевом интерфейсе. (http://forum.oszone.net/showthread.php?t=247806)

Anton04 27-11-2012 11:54 2033792

Смена DNS только на активном сетевом интерфейсе.
 
Здравствуйте.

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

Данное задание напоминает топик Смена адресов DNS на всех компах в домене, но предложенный там вариант не совсем подходит, а именно нужно смена dns только на текущем (активном) интерфейсе, не затрагивая остальные интерфейсы (GPO не предлагать, т.к. скрипт планируется запускать не только в доменной структуре).

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

Change DNS and WINS on Remote Machines (VB Script)
Изменить список DNS серверов (скрипт)
Смена шлюза и DNS скриптом
CONFIGURATION IP ALTERNATIVE AVEC DHCP ACTIF (ALTERNATE IP) - хоть и совсем не то, но тоже интересный вариант.
:flag:

Iska 27-11-2012 13:08 2033840

Anton04, расскажите, что отличает «текущий (активный) сетевой интерфейс» от прочих.

Anton04 27-11-2012 13:26 2033862

Цитата:

Цитата Iska
что отличает «текущий (активный) сетевой интерфейс» от прочих. »

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

Iska 27-11-2012 15:45 2033958

Тогда почему:
Цитата:

Цитата Anton04
Данное задание напоминает топик Смена адресов DNS на всех компах в домене, но предложенный там вариант не совсем подходит, а именно нужно смена dns только на текущем (активном) интерфейсе, не затрагивая остальные интерфейсы »

не подходит? Там ведь есть:
Цитата:

Код:

"Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE"


Anton04 27-11-2012 16:04 2033979

Цитата:

Цитата Iska
не подходит? »

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

Iska 28-11-2012 03:57 2034407

Если речь про это:



то, можно, например, так:
читать дальше »
Код:

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.

Anton04 28-11-2012 10:30 2034489

Цитата:

Цитата Iska
Если речь про это: »

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

Цитата:

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

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

Цитата:

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

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

Iska 28-11-2012 11:08 2034509

Цитата:

Цитата Anton04
Ну это одно и тоже что и на первой закладке, …»

Отчасти. На первой вкладке можно задать не более двух.


Цитата:

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

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

Anton04 28-11-2012 11:14 2034512

Iska,

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

Удачи Вам.

atx 28-10-2014 13:02 2421469

Можно подниму тему.

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

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

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

atx 28-10-2014 16:45 2421622

Я пробую отсюда
http://kunaludapi.blogspot.co.uk/201...motely-on.html

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

atx 29-10-2014 10:56 2422012

Собственно разобрался сам. Скрипт на 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"
}

}


Время: 19:11.

Время: 19:11.
© OSzone.net 2001-