Что нового

[Сеть, интернет] Как переименовать сетевое подключение?

Favorite6233

Знающий
Сообщения
21
Репутация
5
Возник вопрос: как переименовать сетевое подключение программно. После подключения нового физического сетевого адаптера или программного получается имя сетевого подключения такого вида: "Подключение по локальной сети", "Подключение по локальной сети 2" и т.д. Задача: переименовать вот это "Подключение по локальной сети" в что-нибудь другое, например "Internet" или "Local"
Понятно, что можно прямой записью в реестре это поменять, но это уже хирургическое вмешательство в кишки Windows. А есть ли программный интерфейс для такого изменения типа WMI? У меня через WMI получилось только получить имена сетевых адаптеров и имена подключений, которые соответствуют этим сетевым адаптерам. В указанном ниже примере я выделяю из общего списка сетевых адаптеров адаптер, который ставится системой Open VPN и имеет имя "TAP-Win32 Adapter V9". Этому имени будет соответствовать имя подключения "Подключение по локальной сети" (ну или какое я могу вручную написать в разделе сетевых подключений). А вот как бы поменять это "Подключение по локальной сети" не используя реестр?

Код:
#include <array.au3>
$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
$objClass = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapter where Name=""TAP-Win32 Adapter V9""")

Local $MyArray[1][2]
$i=0
For $obj in $objClass
	$MyArray[$i][0] = $obj.Name
	$MyArray[$i][1] = $obj.NetConnectionID
;	$obj.NetConnectionID = "OVPN"
	$i += 1
	ReDim $MyArray[$i+1][2]
Next
_ArrayDisplay($MyArray)
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Чтобы не задавать в будущем глупых вопросов есть встроения утилита для wmi wbemtest, в коей можно посмотреть список возможных значений для экземпляра класса. В Win32_NetworkAdapter значения имя подключения нет. А если не выёживаться, имя подключения меняется командой netsh interface set interface name="oldname" newname="newname".
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
Всё, разобрался, как сделать:
Код:
Const $CSIDL_CONNECTIONS = 0x31 ; Это папка "Сетевые подключения". Долго я искал, отуда эти цифры взялись, но так и не нашёл ни описания, ни реестра. Просто есть где-то в инете и откуда взялись - не знаю. Скачал файл с названием shlobj.h Там есть все коды этих самых спец.папок.
$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
$objClass = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapter where Name=""TAP-Win32 Adapter V9""")
$oShell = ObjCreate("Shell.Application")
$oConnections = $oShell.NameSpace($CSIDL_CONNECTIONS)

For $obj in $objClass
	For $oCon in $oConnections.Items
	 If $oCon.Name = $obj.NetConnectionID Then
			$oCon.Name = "OVPN1"
		EndIf
 Next
Next


То, что там такого метода нет, я давно нашёл, думал, может ещё какой класс есть, в котором будет такой метод.
netsh предлагаете запускать через Run или ShellExecute?
По-моему мой метод интереснее.
А вместо wbemtest есть в инете хорошая утилита WMICodeCreator (по-моему на сайте microsoft-a лежит). Там можно и методы и свойства посмотреть.
 
Верх