PDA

Показать полную графическую версию : [решено] Удаленная смена IP


Dvizhnyak
18-08-2009, 09:39
Здравствуйте. Есть сеть на 80 компов winXP. Компы в домене под win2003. Подняты DHCP и DNS . На компах IP адрес, маска, шлюз, днс выставлены вручную. Подскажите пожалуйста как удаленно(скриптом), через политики, сделать так что бы IP адреса, маска, шлюз, днс выдавались автоматом.

vitaliyboch
18-08-2009, 10:20
Через VBS скрипт делал. Только у меня обратная задача была из DHCP переделать в статический. Посмотрю в архиве скрипт, может найду тебе готовое решение.

Petya V4sechkin
18-08-2009, 10:54
Dvizhnyak, можно батником:
WMIC Path Win32_NetworkAdapterConfiguration Where "IPEnabled = True" Call SetDNSServerSearchOrder
WMIC Path Win32_NetworkAdapterConfiguration Where "IPEnabled = True" Call EnableDHCP

vitaliyboch
18-08-2009, 11:23
Вот нашел сценарий, который включает DHCP:


sComputer = "ip_адрес_или_имя_компьютера"

' подключение к компьютеру
Set oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")

' получение конфигурации сетевого адаптера, где не включен DHCP
Set oNetAdapters = oWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

' включение DHCP
For Each oNetAdapter In oNetAdapters
errEnable = oNetAdapter.EnableDHCP()
Next

' результат операции
msgbox "Error code: " & errEnable


А вот такой скрит заменяет один статический или динамический IP на другой статический IP.
Скрипт можно использовать для перехода с DHCP на статику, указав в исходных данных:
old_ip_address=new_ip_address=текщий IP компьютера, которому меняем конфигурацию


' Исходные данные
strComputer = "old_ip_address"
sSubnetMask = "old_subnet_mask"
sNewIPAddress = "new_ip_address"
sWinsSecondaryServer = "second_wins_server"

' Поиск компьютера в сети
set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter " & "Where NetConnectionID = " & "'Local Area Connection'")

for each objItem in colItems
strMACAddress = objItem.MACAddress
next

set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapterConfiguration WHERE MACAddress = '" & strMACAddress & "'")

' получение текущих параметров сетевого адаптера
dim aDNSServer()
dim aDefaultIPGateway()
dim aGatewayMetric()

for each oItem in colItems
for each IPAddress in oItem.IPAddress
sIPAddress = IPAddress
next
if sSubnetMask = "" then
for each IPSubnet in oItem.IPSubnet
sSubnetMask = IPSubnet
next
end if
iCounter = 0
redim aDNSServer(0)
for each DNSServer in oItem.DNSServerSearchOrder
redim preserve aDNSServer (iCounter)
aDNSServer(iCounter) = DNSServer
iCounter = iCounter + 1
next
sWINSPrimaryServer = oItem.WINSPrimaryServer
iCounter = 0
redim aDefaultIPGateway(0)
redim aGatewayMetric(0)
for each DefaultIPGateway in oItem.DefaultIPGateway
redim preserve aDefaultIPGateway (iCounter)
aDefaultIPGateway(iCounter) = DefaultIPGateway
redim preserve aGatewayMetric(iCounter)
aGatewayMetric(iCounter) = iCounter + 1
iCounter = iCounter + 1
next
exit for
next

' Составление новых параметров сетевого адаптера
aNewIPAddress = Array(sNewIPAddress)
aSubnetMask = Array(sSubnetMask)
for each DNSServer in aDNSServer
sDNSServer = sDNSServer & DNSServer & ", "
next
for each DefaultIPGateway in aDefaultIPGateway
sDefaultIPGateway = DefaultIPGateway
next

' Вывод статистики по текущей и по будущей конфигурации сетевого адаптера
msgbox "Current IP address: " & sIPAddress & vbCrLf & "New IP address:" & sNewIPAddress & vbCrLf _
& "Subnet mask is " & sSubnetMask & vbCrLf _
& "Default Gateway: " & sDefaultIPGateway & vbCrLf _
& "DNS servers: " & sDNSServer & vbCrLf _
& "WINS Primary Server: " & sWINSPrimaryServer

' Установка нового IP адреса
if sNewIPAddress <> "" then
on error resume next
For Each oNetAdapter in colItems
errWINS = oNetAdapter.SetWINSServer(sWINSPrimaryServer, sWinsSecondaryServer)
errDNS = oNetAdapter.SetDNSServerSearchOrder(aDNSServer)
errGateways = oNetAdapter.SetGateways(aDefaultIPGateway, aGatewayMetric)
errEnable = oNetAdapter.EnableStatic(aNewIPAddress, aSubnetMask)
exit for
Next
end if

' результат операции
msgbox errWINS + errDNS + errGateways + errEnable & " errors"

verna
19-08-2009, 13:02
в 2003 только логон скриптами.

если КД 2008 и клиенты под Vista можно доменными политиками

batyaPS
24-08-2009, 14:11
vitaliyboch, А вот такой скрит заменяет один статический или динамический IP на другой статический IP.
Скрипт можно использовать для перехода с DHCP на статику, указав в исходных данных:
old_ip_address=new_ip_address=текщий IP компьютера, которому меняем конфигурацию »

в моем случае подойдет ?пост (http://forum.oszone.net/post-1201257-3.html)

batyaPS
24-08-2009, 15:46
А вот такой скрит заменяет один статический или динамический IP на другой статический IP.
Скрипт можно использовать для перехода с DHCP на статику, указав в исходных данных:
old_ip_address=new_ip_address=текщий IP компьютера, которому меняем конфигурацию »


выдает ошибку сценария
строка : 11
символ : 1
ошибка : 0x80041017
код : 80041017
источник (null)

Вот нашел сценарий, который включает DHCP: »

еррор коде : 0

verna
25-08-2009, 13:25
это скрипты запускаемые локально. а ТСу нужно удаленно

batyaPS
25-08-2009, 14:43
это скрипты запускаемые локально. а ТСу нужно удаленно »

а если через логон скрипт ?

verna
25-08-2009, 14:49
можно, причем для 2003 это единственный вариант
об этом выше писал

batyaPS
25-08-2009, 15:45
можно, причем для 2003 это единственный вариант
об этом выше писал »


помогите кто нибудь эти скрипты чуть изменить для логон скрипта .
по типу


если IP тачка получает по DHCP то меняем на статический
если имя компа тото то меняем IP на такой то и прописываем маску , днс , шлюз.

такой то IP
такой ТО iP
такоц то Ip

vitaliyboch
29-12-2009, 14:22
batyaPS, так надо не просто скрипт скопровать, а заполнить параметры
' Исходные данные
strComputer = "old_ip_address" - текущий IP адрес
sSubnetMask = "old_subnet_mask" - текущая маска сети
sNewIPAddress = "new_ip_address" - новый IP адрес
sWinsSecondaryServer = "second_wins_server" - можно не запонять

Скрипт запускается с компьютера администратора и менят настойки сетевого интерфейса указанного компьютера.

еррор коде : 0 » означает что ошибок нет!

Вот пример заполнения исходных данных
' Исходные данные
strComputer = "172.31.26.123"
sSubnetMask = "255.255.240.0"
sNewIPAddress = "172.31.26.123"
sWinsSecondaryServer = ""

В данном случае перевожу комп с динамики на статику, поэтому новый и старый адреса одинаковые

batyaPS
01-01-2010, 21:39
Вот пример заполнения исходных данных
' Исходные данные
strComputer = "172.31.26.123"
sSubnetMask = "255.255.240.0"
sNewIPAddress = "172.31.26.123"
sWinsSecondaryServer = "" »

скрипт отрабатывает . ошибок нет , но в свойствах TCP/IP не чего не меняется .

еще , зависит ли работа скрипта от кол-ва сетевых карт ? и как он определяет на каком интерфейсе менять настройки . ?

fomin_
02-01-2010, 11:26
batyaPS,
еще , зависит ли работа скрипта от кол-ва сетевых карт ? и как он определяет на каком интерфейсе менять настройки . ?
Не зависит. Скрипт ищет интерфейс с именем 'Local Area Connection' . Все остальное игнорируется.
Чтобы скрипт определил все подключенные проводные ethernet соединения, нужно заменить в скрипте
set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter " & "Where NetConnectionID = " & "'Local Area Connection'")
на
set colItems = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapter Where NetConnectionID Like 'Local%'")
Но это тоже не поможет, тк логика работы скрипта подразумевает, что выбирается макадрес только из последнего экземпляра коллекции colItems:
for each objItem in colItems
strMACAddress = objItem.MACAddress
next
Короче, автору надо подправить скрипт

vitaliyboch
08-01-2010, 00:33
еще , зависит ли работа скрипта от кол-ва сетевых карт ? и как он определяет на каком интерфейсе менять настройки . ? »
Не зависит от количества сетевых карт - скрипт поменяет настроки у той карты, у которой совпадет IP с указнааым в исходных данных.
скрипт отрабатывает . ошибок нет , но в свойствах TCP/IP не чего не меняется .
скрипт обязательно должен что-то выдать - либо ошибку с ее кодом, либо ноль - "0". Если этого не произошло, то либо неверные исходные данные, либо Вам не хватает прав для смены настроек.

batyaPS
08-01-2010, 14:16
либо ноль - "0" »

0 выдает после выполнения , но на самой тачке не чего не меняется .
Может нужна перезагрузка ?

fomin_
08-01-2010, 17:41
По поводу почему после отработки скрипта ничего не меняется.
Скорее всего Вы используете русскую WinXP.
А в ней проводной интерфейс по умолчанию называется "Подключение по локальной сети"
Теперь обратимся к wmi запросу из скрипта:
set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter " & "Where NetConnectionID = " & "'Local Area Connection'")
Очевидно, что интерфейса с именем Local Area Connection в русской XP нет, поэтому скрипт не находит интерфейса и завершается, так ничего не изменив.
Чтобы wmi-запрос мог работать и с англ. и с русской XP, поменяйте приведенную строку скрипта на
set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter Where NetConnectionID like '%локальной%' or NetConnectionID like 'Local%'")

ЗЫ:
Предполагаю, что исправив эту ошибку, через несколько строк Вы упретесь в следующую.
(Такой уж скрипт!)

vitaliyboch
23-06-2010, 15:38
Вот модификация скрипта, но мне кажется, что будут проблемы при удаленной смене конфигурации адаптера, если задать разные значения IP адреса текущего и нового.

' Целевой компьютер
mComputer = "."
' Новые сетевые параметры задаются конкретными значениями
' Аналогичные параметры задаются значением "The same"
' Пустые парамеры задаются значением ""
mNewIPAddress = "The same"
mNewSubnetMask = "The same"
mNewDNSServer = "The same"
mNewDefaultIPGateway = "The same"
mNewWINSPrimaryServer = "The same"
mNewWINSSecondaryServer = "The same"
' Рабочие массивы
Dim mDNSServerList()
Dim mDefaultIPGatewayList()
Dim mGatewayMetricList()
Dim mNewDNSServerList()
Dim mNewDefaultIPGatewayList()
Dim mNewGatewayMetricList()
' Подключение к пространству имен целевого компьютера
Set mSWbemServices = GetObject("winmgmts:\\" & mComputer & "\Root\CIMv2")
' Получение коллекции адаптеров с указанным IP-адресом
Set mAdapterList = mSWbemServices.ExecQuery ("Select * From Win32_NetworkAdapter")
' Получение MAC-адреса адаптера локального адаптера
For Each mCurrentAdapter In mAdapterList
If InStr(LCase(mCurrentAdapter.NetConnectionID), "локальн") > 0 _
Or InStr(LCase(mCurrentAdapter.NetConnectionID), "local") > 0 Then
mMACAddress = mCurrentAdapter.MACAddress
mCaption = mCurrentAdapter.Caption
Exit For
End If
Next
' Получение коллекции параметров адаптера с указанным MAC-адресом
Set mAdapterConfigList = mSWbemServices.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration WHERE MACAddress = '" _
& mMACAddress & "'")
' Получение текущих параметров сетевого адаптера с указанным MAC-адресом
For Each mCurrentAdapterConfig In mAdapterConfigList
' IP-адрес
If IsNull(mCurrentAdapterConfig.IPAddress) = False Then
For Each mCurrentIPAddress In mCurrentAdapterConfig.IPAddress
mIPAddress = mCurrentIPAddress
Exit For
Next
End If
If mNewIPAddress = "The same" Then mNewIPAddress = mIPAddress
mNewIPAddressList = Array(mNewIPAddress)
' Маска подсети
If IsNull(mCurrentAdapterConfig.IPSubnet) = False Then
For Each mCurrentIPSubnet In mCurrentAdapterConfig.IPSubnet
mSubnetMask = mCurrentIPSubnet
Exit For
Next
End If
If mNewSubnetMask = "The same" Then mNewSubnetMask = mSubnetMask
mNewSubnetMaskList = Array(mNewSubnetMask)
' DNS сервера
If IsNull(mCurrentAdapterConfig.DNSServerSearchOrder) = False Then
iCounter = 0
For Each mCurrentDNSServer In mCurrentAdapterConfig.DNSServerSearchOrder
Redim Preserve mDNSServerList(iCounter)
mDNSServerList(iCounter) = mCurrentDNSServer
iCounter = iCounter + 1
Next
End If
If mNewDNSServer = "The same" Then
For iCounter = 0 To UBound(mDNSServerList)
Redim Preserve mNewDNSServerList(iCounter)
mNewDNSServerList(iCounter) = mDNSServerList(iCounter)
Next
Else
For iCounter = 0 To UBound(Split(mNewDNSServer,";"))
Redim Preserve mNewDNSServerList(iCounter)
mNewDNSServerList(iCounter) = Split(mNewDNSServer,";")(iCounter)
Next
End If
' Шлюзы
If IsNull(mCurrentAdapterConfig.DefaultIPGateway) = False Then
iCounter = 0
For Each mCurrentDefaultIPGateway In mCurrentAdapterConfig.DefaultIPGateway
Redim Preserve mDefaultIPGatewayList(iCounter)
mDefaultIPGatewayList(iCounter) = mCurrentDefaultIPGateway
Redim Preserve mGatewayMetricList(iCounter)
mGatewayMetricList(iCounter) = iCounter + 1
iCounter = iCounter + 1
Next
End If
If mNewDefaultIPGateway = "The same" Then
For iCounter = 0 To UBound(mDefaultIPGatewayList)
Redim Preserve mNewDefaultIPGatewayList(iCounter)
mNewDefaultIPGatewayList(iCounter) = mDefaultIPGatewayList(iCounter)
Redim Preserve mNewGatewayMetricList(iCounter)
mNewGatewayMetricList(iCounter) = iCounter + 1
Next
Else
For iCounter = 0 To UBound(Split(mNewDefaultIPGateway,";"))
Redim Preserve mNewDefaultIPGatewayList(iCounter)
mNewDefaultIPGatewayList(iCounter) = Split(mNewDefaultIPGateway,";")(iCounter)
Redim Preserve mNewGatewayMetricList(iCounter)
mNewGatewayMetricList(iCounter) = iCounter + 1
Next
End If
' WINS сервера
If IsNull(mCurrentAdapterConfig.WINSPrimaryServer) = False Then
mWINSPrimaryServer = mCurrentAdapterConfig.WINSPrimaryServer
End If
If mNewWINSPrimaryServer = "The same" Then
If IsNull(mCurrentAdapterConfig.WINSPrimaryServer) = True Then
mNewWINSPrimaryServer = ""
Else
mNewWINSPrimaryServer = mWINSPrimaryServer
End If
End If
If IsNull(mCurrentAdapterConfig.WINSSecondaryServer) = False Then
mWinsSecondaryServer = mCurrentAdapterConfig.WINSSecondaryServer
End If
If mNewWinsSecondaryServer = "The same" Then
If IsNull(mCurrentAdapterConfig.WINSSecondaryServer) = True Then
mNewWinsSecondaryServer = ""
Else
mNewWinsSecondaryServer = mWINSSecondaryServer
End If
End If
Exit For
Next
' Формирование сообщения по текущей и по будущей конфигурациям сетевого адаптера
mInfoMessage = "Network adapter: " & mCaption & vbCrLf _
& "MAC address: " & mMACAddress & vbCrLf _
& "Current configuration:" & vbCrLf _
& vbTab & "IP address: " & mIPAddress & vbCrLf _
& vbTab & "Subnet mask: " & mSubnetMask & vbCrLf _
& vbTab & "Default Gateway: " & Join(mDefaultIPGatewayList,";") & vbCrLf _
& vbTab & "DNS servers: " & Join(mDNSServerList,";") & vbCrLf _
& vbTab & "WINS Primary Server: " & mWINSPrimaryServer & vbCrLf _
& vbTab & "WINS Secondary Server: " & mWINSSecondaryServer & vbCrLf _
& "New configuration:" & vbCrLf _
& vbTab & "IP address: " & mNewIPAddress & vbCrLf _
& vbTab & "Subnet mask: " & mNewSubnetMask & vbCrLf _
& vbTab & "Default Gateway: " & Join(mNewDefaultIPGatewayList,";") & vbCrLf _
& vbTab & "DNS servers: " & Join(mNewDNSServerList,";") & vbCrLf _
& vbTab & "WINS Primary Server: " & mNewWINSPrimaryServer & vbCrLf _
& vbTab & "WINS Secondary Server: " & mNewWINSSecondaryServer & vbCrLf _
& vbCrLf & "Please confirm the changes" & mNewWINSSecondaryServer & vbCrLf
' Окно подтверждения изменения настроек сетевого параметра
mChangeFlag = MsgBox(mInfoMessage, vbOKCancel, "Network card settings change")
If mChangeFlag = vbOK Then
' Установка нового IP адреса
For Each mCurrentAdapterConfig in mAdapterConfigList
errEnable = mCurrentAdapterConfig.EnableStatic _
(mNewIPAddressList, mNewSubnetMaskList)
errGateways = mCurrentAdapterConfig.SetGateways _
(mNewDefaultIPGatewayList, mNewGatewayMetricList)
errWINS = mCurrentAdapterConfig.SetWINSServer _
(mNewWINSPrimaryServer, mNewWinsSecondaryServer)
errDNS = mCurrentAdapterConfig.SetDNSServerSearchOrder _
(mNewDNSServerList)
Exit For
Next
' Pезультат операции
mInfoMessage = "Operation result:" & vbCrLf _
& "IP address error code: " & errEnable & vbCrLf _
& "Gateway error code: " & errGateways & vbCrLf _
& "DNS error code: " & errDNS & vbCrLf _
& "WINS error code: " & errWINS & vbCrLf
Else
mInfoMessage = "The operation is canceled"
End If
Wscript.Echo(mInfoMessage)

vitaliyboch
25-06-2010, 10:41
Как я и предполагал, существует проблема при смене IP адреса на компьютере из другого филиала. Текущий скрипт сначала меняет IP, а потом прописывает остальные параметры, но компьютер становится уже недоступен - нет верных настроек шлюза. Если изменить порядок внесения параметров и менять IP только после смены DNS серверов и шлюза, то шлюз оказывается пустым для статических параметров! Он почему-то прописывается в динамические характеристики.
Кто знает как обойти эту проблему?
В этой части кода изменен порядок внесения параметров
------
errGateways = mCurrentAdapterConfig.SetGateways _
(mNewDefaultIPGatewayList, mNewGatewayMetricList)
errWINS = mCurrentAdapterConfig.SetWINSServer _
(mNewWINSPrimaryServer, mNewWinsSecondaryServer)
errDNS = mCurrentAdapterConfig.SetDNSServerSearchOrder _
(mNewDNSServerList)
errEnable = mCurrentAdapterConfig.EnableStatic _
(mNewIPAddressList, mNewSubnetMaskList)
-------




© OSzone.net 2001-2012