Что нового

[Сеть, интернет] Смена сетевых настроек

arr1val

Новичок
Сообщения
16
Репутация
0
Версия AutoIt: 3.

Описание: Автоматизировать смену сетевых настроек

Есть пример на vbs:
Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")


strSubnetMask = "255.255.248.0"


For Each objNetAdapter in colNetAdapters

strIPAddress = CStr(objNetAdapter.IPAddress(0))

 errEnable = objNetAdapter.EnableStatic(Array(strIPAddress), Array(strSubnetMask))

Next


Дано: менять маску (основное что нужно), днс, винсы, шлюз, при этом не затрагивая уже прописанный статический айпи. Возможно ли это реализовать на аутоит ? Возможно ли в теле скрипта прописывать выполнение команд из под учетки админа ?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Проверить не могу. Но если просто "перевести" с одного языка на другой, то так
Код:
$strComputer =  "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colNetAdapters = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE and DHCPEnabled=TRUE")
 
For $objNetAdapter in $colNetAdapters
	For $strAddress in $objNetAdapter.IPAddress
		$arrOctets = StringSplit($strAddress, ".")
		If $arrOctets[0] and $arrOctets[1] Then
			$strNewAddress = $arroctets[0] & "." & $arroctets[1] & "." & $arrOctets[2] & "." & "211"            
			Dim $arrIPAddress[1]
			$arrIPAddress[0] = $strNewAddress
			$strSubnetMask = $objNetAdapter.IPSubnet
			$strGateway = $objNetAdapter.DefaultIPGateway
			$strGatewayMetric = $objNetAdapter.GatewayCostMetric
			$arrDNSServers = $objNetAdapter.DNSServerSearchOrder
			$errEnable = $objNetAdapter.EnableStatic($arrIPAddress, $strSubnetMask)
			$errGateways = $objNetAdapter.SetGateways($strGateway, $strGatewaymetric)
			$objNetAdapter.SetDNSServerSearchOrder($arrDNSServers)
		EndIf
	Next
Next



Добавлено:
Сообщение автоматически объединено:

хм... уже другой код.


Добавлено:
Сообщение автоматически объединено:

опять же тупой перевод
Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")

$colNetAdapters = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

$strSubnetMask = "255.255.248.0"

Dim $_IPtmp[1]
Dim $_SMtmp[1]
For $objNetAdapter in $colNetAdapters
	$IP = $objNetAdapter.IPAddress
	$strIPAddress = String($IP[0])
	$_IPtmp[0] = $strIPAddress
	$_SMtmp = $strSubnetMask
	$errEnable = $objNetAdapter.EnableStatic($_tmp, $_SMtmp)
Next
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
Прошу прощения за смену, думал не среагируют так быстро :smile: Пока писал код додумался как его оптимизировать. Спасибо за "перевод" буду пробовать.
Не сможете подсказать про запуск из под другого пользователя, прописанный в теле скрипта ?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
arr1val
запуск чего? в скрипте кажись нет ни одного Run, если ты об этом.
 

Guezt

Продвинутый
Сообщения
335
Репутация
81
arr1val
Суровый, но проверенный вариант сохранения-востановления сетевых настроек!
Код:
#include <Process.au3>
$sNameSet = "1.config" ; файл настроек адаптера
$sSaveSet = "netsh dump>"&$sNameSet
$sLoadSet = "netsh exec "&$sNameSet
_RunDOS($sSaveSet) ; сохранить настройки
;_RunDOS($sLoadSet) ; загрузить настройки
:smile:
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
2 Kaster,
изменения к сетевому адаптеру не применяться если скрипт будет отрабатываться не из под админской учетки. Вот и думаю, есть ли возможность прописать в скрипте применение данных изменений от учетной записи администратора, доменной или локальной.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
arr1val
не знаю, насколько это отобразится при создании объектов, в смысле какие права доступа при этом унаследуются, но можно сделать проверку условия в самом цикле на наличие ключа, и при обнаружении запустить этот же скрипт с ключом от имени нужного пользователя.
Код:
If $CmdLine[0] Then
   ; Тело скрипта
Else
   $sPath = @AutoItExe & ' "' @ScriptFullPath & '" -k'
   RunAs($user, $domain, $pass, 0, $sPath)
EndIf
 
Автор
A

arr1val

Новичок
Сообщения
16
Репутация
0
Спасибо большое ! :smile:
 
Верх