Что нового

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

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
 
Верх