Тема: AHK: Настройки сетевого адаптера
Доброго времени суток!
Подскажите пожалуйста, есть возможность средствами AutoHotKey прописать "альтернативный DNS" ?
Не спеши, а то успеешь..
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Доброго времени суток!
Подскажите пожалуйста, есть возможность средствами AutoHotKey прописать "альтернативный DNS" ?
Средствами AutoHotKey 1.0.48.05?
migomigo, обрати внимание на оформление заголовков тем.
migomigo, обрати внимание на оформление заголовков тем.
Раньше, все свои посты оформлял полным названием AutoHotKey
Название темы исправил.
Средствами AutoHotKey 1.0.48.05?
Согласен, у меня подпись динозавра..
Вопрос не про подпись был.
Win32_NetworkAdapterConfiguration
Вопрос не про подпись был.
Win32_NetworkAdapterConfiguration
В таком случае, версия AHK не имеет значения.
Настройка параметров сетевого адаптера из командной строки
Изменить настройки DNS
Команда выглядит следующим образом:
C:\Windows\system32>netsh interface ip set dnsservers help
Применение: set dnsservers [name=]<строка> [source=]dhcp|static
[[address=]<IP-адрес>|none]
[[register=]none|primary|both]
[[validate=]yes|no]
Параметры
Тег Значение
name - Имя или индекс интерфейса.
source - Одно из следующих значений:
dhcp: назначает DHCP в качестве источника конфигурации
DNS-серверов для определенного интерфейса.
static: назначает в качестве источника конфигурации
DNS-серверов локальную статическую конфигурацию.
address - Одно из следующих значений:
<IP-адрес>: IP-адрес DNS-сервера.
none: очищает список DNS-серверов.
register - Одно из следующих значений:
none: отключает динамическую регистрацию DNS.
primary: регистрация только с суффиксом основного DNS.
both: регистрация как с суффиксом основного DNS,
так и с суффиксом, определенным для подключения.
validate - Указывает, выполняется ли проверка после настройки
параметров DNS-сервера. Значение по умолчанию: yes.
Примечания. Задает в конфигурации DNS-сервера режим DHCP или статический
режим. Параметр addr будет доступен для конфигурации
статического списка IP-адресов DNS-серверов для указанного
интерфейса только при установке источником static. Если значение
параметра Validate равно yes, то новый DNS-сервер проверяется.
Примеры
set dnsservers name="Local Area Connection" source=dhcp
set dnsservers "Local Area Connection" static 10.0.0.1 primary
В сети гуляет подавляющее большинство описаний, где вместо dnsservers указывается dns. Это устаревший параметр, который оставлен для совместимости.
Пример 1. Задать автоматическое получение параметров DNS-сервера по протоколу DHCP для адаптера "Подключение по локальной сети":
netsh interface ip set dnsserver name="Подключение по локальной сети" source=dhcp
или
netsh interface ip set dnsserver "Подключение по локальной сети" dhcp
Пример 2. Задать статические параметры DNS-сервера для адаптера "Подключение по локальной сети", где первый DNS-сервер имеет IP-адрес 213.108.208.2, а второй 213.108.209.2:
netsh interface ip set dnsservers "Подключение по локальной сети" static 213.108.208.2
netsh interface ip add dnsservers "Подключение по локальной сети" 213.108.209.2
Обратите внимание, что команда set dnsservers сбрасывает список DNS-серверов для выбранного сетевого адаптера и устанавливает первый DNS-сервер в указанное значение. Последующие DNS-сервера добавляются через команду add вместо set.
Спасибо.
Вот что получилось:
SendMode Input
SetKeyDelay, -1
Conect_Name := "BSS" ;=============================== [ Имя сетевого подключения ]
IP_Adress := "192.168.250.22" ;=============================== [ DNS Server ]
WinName := "ahk_class ConsoleWindowClass" ;=============================== [ Имя Окна ]
Command = netsh interface ip add dnsservers "%Conect_Name%" %IP_Adress%
F10::
Run, CMD.exe, C:\Windows\System32
WinWait, % WinName
Send, % Command "{Enter}"
Sleep, 1000
WinClose, % WinName
return
Я правильно вас понял, или можно как-то упростить? Как считаете?
Горячую клавишу можно и в одну строчку уместить:
F10:: Run, netsh interface ip add dnsservers %Conect_Name% %IP_Adress%, , Hide
Супер!
Спасибо!
В таком случае, версия AHK не имеет значения.
Версия определяет реализацию. Для актуальной:
alternateDNS := "8.8.4.4"
WMI := ComObjGet("winmgmts:\\" . A_ComputerName . "\root\cimv2")
query := "SELECT DNSServerSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE"
for NetAdapter in WMI.ExecQuery(query) {
NewDNSServerSearchOrder := NetAdapter.DNSServerSearchOrder
NewDNSServerSearchOrder[1] := alternateDNS
NetAdapter.SetDNSServerSearchOrder(NewDNSServerSearchOrder)
}
В таком случае, версия AHK не имеет значения.
Версия определяет реализацию. Для актуальной:
alternateDNS := "92.168.250.22" WMI := ComObjGet("winmgmts:\\" . A_ComputerName . "\root\cimv2") query := "SELECT DNSServerSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE" for NetAdapter in WMI.ExecQuery(query) { NewDNSServerSearchOrder := NetAdapter.DNSServerSearchOrder NewDNSServerSearchOrder[1] := alternateDNS NetAdapter.SetDNSServerSearchOrder(NewDNSServerSearchOrder) }
Этот код, после запуска выдаёт у меня следующую ошибку:
Попробуйте не копировать DNSServerSearchOrder в NewDNSServerSearchOrder,
а предварительно его создать и заполнить.
То что надо, спасибо!
Дело в том что мои познания не идут дальше AHK. И эта функция для меня - тёмный лес...
creature.ws!
А если речь пойдет о Всех настройках сетевого адаптера?
Возможно такую же функцию написать для:
IP Адрес:
Маска подсети:
Шлюз:
DNS:
Альтернативный DNS: (Уже есть)
Win32_NetworkAdapterConfiguration class содержит необходимые методы.
SetGateways для маски и шлюза, SetDNSServerSearchOrder для dns, EnableStatic для ip aдрес.
Немогу проследить аналогию..
Если вам не трудно, адаптируйте пожалуйста этот скрипт:
alternateDNS := "8.8.4.4"
WMI := ComObjGet("winmgmts:\\" . A_ComputerName . "\root\cimv2")
query := "SELECT DNSServerSearchOrder FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE"
for NetAdapter in WMI.ExecQuery(query) {
NewDNSServerSearchOrder := NetAdapter.DNSServerSearchOrder
NewDNSServerSearchOrder[1] := alternateDNS
NetAdapter.SetDNSServerSearchOrder(NewDNSServerSearchOrder)
}
для команды: EnableStatic
Может быть тогда смогу понять...
WMI.ExecQuery(query)
Насколько я понимаю, ссылается на функцию.. Среди встроенных функций, таковую не могу найти, в теле скрипта её нет.. Как этот код работает - не понимаю..
Примеры на VBS: WMI Tasks: Networking
WMI — SWbemServices object.
ExecQuery — ExecQuery метод этого объекта.
WMI.ExecQuery(query) — при данном query — «коллекция сетевых адаптеров» для которых флаг IPEnabled = true
for NetAdapter in WMI.ExecQuery(query) — перебор коллекции.
NetAdapter.SetDNSServerSearchOrder() — вызов метода SetDNSServerSearchOrder класса Win32_NetworkAdapterConfiguration в контексте текущего адаптера.
NetAdapter.EnableStatic() — вызов метода EnableStatic. В качестве агрумента этому методу следует передать объект (предварительно созданный с помощью встроенной функции ComObjArray) содержащий нужные параметры.
Попробовал разобраться - это для меня слишком сложно..
Static := "192.168.0.151"
WMI := ComObjGet("winmgmts:\\" A_ComputerName "\root\cimv2")
query := "SELECT EnableStatic FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE"
for NetAdapter in WMI.ExecQuery(query) {
NewEnableStatic := NetAdapter.EnableStatic
NewEnableStatic[1] := Static
NetAdapter.EnableStatic(NewEnableStatic)
}
На этот код Айпи адрес даже и не почесался..
По ссылкам в сообщении #18 можно найти пример на vbs:
strComputer = "."
Set objWMIService = GetObject( _
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration " _
& "where IPEnabled=TRUE")
strIPAddress = Array("192.168.1.141")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.100")
strGatewayMetric = Array(1)
For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic( _
strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(_
strGateway, strGatewaymetric)
Next
От него отталкивайтесь, а не от кода из сообщения #12
В Autohotkey, действие:
strIPAddress = Array("192.168.1.141")
будет выглядеть как:
IPAddress := ComObjArray(8, 1)
IPAddress[0] := "192.168.1.141"
Если в скрипте подразумевается работа только с массивами, применимыми в качестве параметров методов COM объектов, то можно переопределить «родную» Array():
Array(Args*) {
count := Args.MaxIndex()
Array := ComObjArray(8, count)
loop %count%
Array[A_Index - 1] := Args[A_Index]
return Array
}
Если я правильно понимаю, то первый этап - это создание безопасных массивов для работы с COM. (Не понимаю для чего, но судя по всему надо.)
Var_IPAddress := "192.168.60.26"
IPAddress := ComObjArray(8, 1)
IPAddress[0] := Var_IPAddress
Var_SubnetMask := "255.255.255.0"
SubnetMask := ComObjArray(8, 1)
SubnetMask[0] := Var_SubnetMask
Var_Gateway := "192.168.0.6"
Gateway := ComObjArray(8, 1)
Gateway[0] := Var_Gateway
MsgBox, 64, Массивы для "COM", % "Айпи: " IPAddress[0] "`nМаска: " SubnetMask[0] "`nШлюз: " Gateway[0]
ExitApp
То есть, этот код это первая часть скрипта. Я правильно понимаю?
этот код это первая часть скрипта
Часть этого кода будет присутствовать в скрипте.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться