Powershell зарегистрировать адреса этого подключения в dns
Я пишу сценарий для автоматической установки параметров «Зарегистрировать адреса этого подключения в DNS» и «Использовать DNS-суффикс этого подключения в DNS» в расширенных настройках TCP / IP на новом устройстве «из коробки».
Я успешно просматривал настройки сети перед запуском скрипта, чтобы эти настройки были установлены. Я хочу избежать этого любой ценой.
Когда я запускаю этот код в powershell, устанавливается только флажок «Зарегистрировать адреса этого подключения в DNS», а не «Использовать DNS-суффикс этого подключения в DNS».
Outputs
23.07.2021
itpro
PowerShell, Windows 10, Windows Server 2016
комментариев 9
В этой статье мы рассмотрим особенности настройки параметров сетевых адаптеров в Windows из PowerShell. Посмотрим, как узнать и назначить статический IP адрес, DNS сервера, или настроить сетевой интерфейс на получение конфигурации IP от DHCP сервера. Вы можете использовать эти командлеты для настройки сети в Сore/Nano версиях Windows Server, в Hyper-V Server, изменения настроек IP на удаленных компьютерах или по сети серверах или в PS скриптах.
Ранее для настройки параметров сети в Windows из CLI использовалась команда netsh interface ipv4. В PowerShell 3.0 и выше для управления сетевыми настройками Windows можно использовать встроенный PowerShell модуль NetTCPIP.
Чтобы получить список командлетов в этом модуле, выполните:
get-command -module NetTCPIP
В этот модуль также входит командлет Test-NetConnection, который можно использовать для проверки доступности TCP портов на удаленных компьютерах.
Set-DnsClientServerAddress: настроить адреса DNS серверов
Чтобы задать адреса первичного и вторичного DNS серверов в Windows, используется командлет Set-DNSClientServerAddress. Например:
Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.1.11,10.1.1.11
Можно также задать DNS сервера через массив:
$dnsParams = @InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
>
Set-DnsClientServerAddress @dnsParams
После изменения настроек DNS, можно очистить DNS кэш:
Просмотр настроек TCP/IP сетевого интерфейса из PowerShell
Получить текущие настройки сетевого интерфейса (IP адрес, DNS, шлюз):
Get-NetIPConfiguration -InterfaceAlias Ethernet0
Чтобы вывести более подробную информацию о конфигурации сетевого интерфейса, используйте команду:
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
Получить значение только IP адрес интерфейса:
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address
Description
The Set-DnsClientServerAddress cmdlet sets one or more IP addresses for DNS servers associated with an interface. This cmdlet statically adds DNS server addresses to the interface. If this cmdlet is used to add DNS servers to the interface, then the DNS servers will override any DHCP configuration for that interface.
Description
The Set-DnsClient cmdlet sets the interface-specific DNS client configurations on the computer.
Syntax
Example 1: Set the DNS server addresses on an interface with a specified index value
This example sets the DNS server addresses on a specified interface with the index value of 12.
Inputs
Example 1: Set the connection-specific suffix
This example sets the connection-specific suffix on an interface with index 12.
Настроить статический IP адрес из PowerShell
Попробуем задать статический IP адрес для сетевого интерфейса. Чтобы изменить IP адрес, маску подсети и шлюз для сетевого интерфейса:
New-NetIPAddress –IPAddress 192.168.1.80 -DefaultGateway 192.168.1.1 -PrefixLength 24 -InterfaceIndex 8
Можно задать IP адрес, представив его в виде более массива (более наглядно):
$ipParams = @InterfaceIndex = 8
IPAddress = "192.168.1.22"
PrefixLength = 24
AddressFamily = "IPv4"
>
New-NetIPAddress @ipParams
Если статический IP адрес уже настроен и нужно изменить его, используется командлет Set-NetIPAddress:
Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.1.90
Чтобы на интерфейсе отключить получение IP адреса от DHCP, выполните:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled
Для просмотра таблицы маршрутизации используется командлет Get-NetRoute . Чтобы добавить новый маршрут, используется New-NetRoute:
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.0.1" -InterfaceIndex 8
Отключим IPv6 протокол для сетевого интерфейса:
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6
Example 2: Reset a DNS client to use the default DNS server addresses
This example resets the DNS client to use the default DNS server addresses specified by DHCP on the interface with an index value of 12.
2 ответа
Есть несколько способов сделать это. Я склонен использовать метод WMI. Первое, что нужно сделать, - это получить все адаптеры с включенным IP. Если у вас есть это, все, что вам нужно сделать, это использовать метод SetDynamicDNSRegistration. Этот метод принимает две перегрузки, оба являются логическими и отображаются на два флажка (зарегистрируйте адреса этого соединения в DNS и используйте DNS-суффикс этого соединения в DNS). В приведенном ниже примере будет установлен флажок Зарегистрировать адреса этого подключения в DNS и снимите флажок Использовать DNS-суффикс этого подключения в DNS ".
Этот пример привел бы к проверке обоих полей:
Я столкнулся с той же проблемой.
При настройке «Использовать DNS-суффикс этого соединения» с помощью командлета Set-DNSClient он запускается успешно. Выполнение командлета Get-DNSClient показывает, что параметр корректно настроен, но соответствующий раздел реестра не создается и графический интерфейс не обновляется.
Ключ - HKLM: \ System \ CurrentControlSet \ Services \ TCPIP \ Paramters \ Interfaces \ Property - RegisterAdapterName
Во время тестирования я заметил, что после создания ключа с помощью кода WMI, описанного выше, REGEDIT или графического интерфейса командлеты PowerShell корректно изменяют ключ реестра / графический интерфейс.
Я прибег к использованию кода, аналогичного примеру, предоставленному DaSmokeDog, для принудительного создания ключей реестра для данного адаптера, а затем возвращаюсь к использованию простых командлетов PowerShell.
Не идеально работать так, но мое (ограниченное) тестирование показывает, что это работает.
Registers all of the IP addresses on the computer onto the configured DNS server.
PowerShell: Настройка получения IP адреса от DHCP сервера
Чтобы сетевой интерфейс компьютера получал динамический IP адрес от DHCP сервера, выполните команду:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled
Очистите настройки DNS серверов:
Set-DnsClientServerAddress –InterfaceIndex 8 -ResetServerAddresses
И перезапустите интерфейс для получения IP адреса:
Restart-NetAdapter -InterfaceAlias Ethernet0
Если ранее у вас был настроен шлюз, удалите его:
Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false
Syntax
Inputs
Syntax
Examples
Description
The Register-DnsClient cmdlet invokes a dynamic update of the DNS names associated with the computer. This cmdlet is global and cannot be invoked on a per-interface basis. Running this cmdlet is equivalent to running ipconfig /registerdns .
Examples
Parameters
Runs the cmdlet as a background job. Use this parameter to run commands that take a long time to complete.
The cmdlet immediately returns an object that represents the job and then displays the command prompt. You can continue to work in the session while the job completes. To manage the job, use the *-Job cmdlets. To get the job results, use the Receive-Job cmdlet.
For more information about Windows PowerShell background jobs, see about_Jobs.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.
Type: | CimSession [ ] |
Aliases: | Session |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the input to this cmdlet. You can use this parameter, or you can pipe the input to this cmdlet.
Type: | CimInstance [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Specifies the friendly name of the interface.
Type: | String [ ] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the index number of the interface.
Type: | UInt32 [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Returns an object representing the item with which you are working. By default, this cmdlet does not generate any output.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Resets the DNS server IP addresses to the default value.
Type: | SwitchParameter |
Aliases: | ResetAddresses |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies a list of DNS server IP addresses to set for the interface.
Type: | String [ ] |
Aliases: | Addresses |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the maximum number of concurrent operations that can be established to run the cmdlet. If this parameter is omitted or a value of 0 is entered, then Windows PowerShell® calculates an optimum throttle limit for the cmdlet based on the number of CIM cmdlets that are running on the computer. The throttle limit applies only to the current cmdlet, not to the session or to the computer.
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Validates that one or more IP addresses are responsive DNS servers before the IP addresses are set to the interface. This parameter must be used with the ServerAddress parameter.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Shows what would happen if the cmdlet runs. The cmdlet is not run.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Examples
Управление сетевыми адаптерами из PowerShell
Выведем список доступных сетевых интерфейсов компьютера:
Командлет возвращает имя интерфейса, состояние (Up/Down), MAC адрес, скорость на порту.
В этом примере у меня на компьютере несколько сетевых адаптеров (кроме физического подключения Ethernet0 есть несколько сетевых интерфейсов от Hyper-V и VMWare Player).
Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец ifIndex). В нашем примере, чтобы выбрать физический LAN адаптер Intel 82574L нужно набрать команду:
Get-NetAdapter -Name "Ethernet0"
Get-NetAdapter -InterfaceIndex 8
Можно изменить имя адаптера:
Rename-NetAdapter -Name Ethernet0 -NewName LAN
Чтобы выключить сетевой интерфейс, используйте команды:
Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter
При включении интерфейса нельзя указать его индекс, т.к. он не присвоен. Можно указать имя адаптера или его описание.
Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"
Если для адаптера указан VLAN, можно вывести его так:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
Информация об используемом драйвере сетевого адаптера:
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName
Информация о физических сетевых адаптерах (PCI слот, шина и т.д.).
Parameters
Runs the cmdlet as a background job. Use this parameter to run commands that take a long time to complete.
The cmdlet immediately returns an object that represents the job and then displays the command prompt. You can continue to work in the session while the job completes. To manage the job, use the *-Job cmdlets. To get the job results, use the Receive-Job cmdlet.
For more information about Windows PowerShell background jobs, see about_Jobs.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.
Type: | CimSession [ ] |
Aliases: | Session |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the maximum number of concurrent operations that can be established to run the cmdlet. If this parameter is omitted or a value of 0 is entered, then Windows PowerShell® calculates an optimum throttle limit for the cmdlet based on the number of CIM cmdlets that are running on the computer. The throttle limit applies only to the current cmdlet, not to the session or to the computer.
Sets DNS server addresses associated with the TCP/IP properties on an interface.
Outputs
The MSFT_DNSClientServerAddress class has the various DNS server IP addresses configured on a given interface. If no interface is specified, then all interfaces are configured.
Sets the interface-specific DNS client configurations on the computer.
Parameters
Runs the cmdlet as a background job. Use this parameter to run commands that take a long time to complete.
The cmdlet immediately returns an object that represents the job and then displays the command prompt. You can continue to work in the session while the job completes. To manage the job, use the *-Job cmdlets. To get the job results, use the Receive-Job cmdlet.
For more information about Windows PowerShell background jobs, see about_Jobs.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer. Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet. The default is the current session on the local computer.
Type: | CimSession [ ] |
Aliases: | Session |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the connection-specific suffixes to append. This parameter value is a per-connection DNS suffix to append to the computer name to construct a Fully Qualified Domain Name (FQDN). This FQDN is used as the host name for name resolution by the DNS client.
Type: | String |
Aliases: | Suffix |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the input to this cmdlet. You can use this parameter, or you can pipe the input to this cmdlet.
Type: | CimInstance [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Specifies the friendly name of the interface.
Type: | String [ ] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the index number of the interface.
Type: | UInt32 [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Returns an object representing the item with which you are working. By default, this cmdlet does not generate any output.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indicates whether the IP address for this connection is to be registered.
Type: | Boolean |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Resets the connection-specific suffix to the default value.
Type: | SwitchParameter |
Aliases: | ResetSuffix |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the maximum number of concurrent operations that can be established to run the cmdlet. If this parameter is omitted or a value of 0 is entered, then Windows PowerShell® calculates an optimum throttle limit for the cmdlet based on the number of CIM cmdlets that are running on the computer. The throttle limit applies only to the current cmdlet, not to the session or to the computer.
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indicates whether this host name and the connection-specific suffix for this connection are to be registered.
Type: | Boolean |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Shows what would happen if the cmdlet runs. The cmdlet is not run.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Удаленное изменение IP/DNS настроек в Windows
Вы можете использовать PowerShell чтобы удаленно изменить настройки IP адресов или DNS серверов на нескольких удаленных компьютерах. Допустим, ваша задача – изменить настройки DNS для всех серверов в указанном контейнере AD. Для получения списка компьютеров в скрипте ниже примере используется командлет Get-ADComputer, а удаленное подключение к компьютерам выполняется через WinRM (командлет Invoke-Command):
$Servers = Get-ADComputer -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Filter '(OperatingSystem -like "Windows Server*")' | Sort-Object Name
ForEach ($Server in $Servers) Write-Host "Server $($Server.Name)"
Invoke-Command -ComputerName $Server.Name -ScriptBlock $NewDnsServerSearchOrder = "192.168.1.11","8.8.4.4"
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object
Write-Host "Old DNS settings: "
$Adapters | ForEach-Object
$Adapters | ForEach-Object | Out-Null
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object
Write-Host "New DNS settings: "
$Adapters | ForEach-Object
>
>
Предыдущая статья Следующая статья
Защита RDP от подбора паролей с блокировкой IP правилами Windows Firewall
Просмотр и анализ логов RDP подключений в Windows
Поиск и удаление писем в ящиках Exchange Server (Microsoft 365) с помощью PowerShell
Когда истекает пароль пользователя в AD, оповещаем пользователей о необходимости сменить пароль
А нет ли способа сделать с помощью PowerShell следующее:
Есть Win2003 server в рабочей группе. PowerShell не стоит, но можно поставить 2.0.
Нужно: с Win2k3 srv экспортировать учетки пользователей и импортировать их на новый Win2012srv.
Можно набить всех пользователей руками, их там 2-3 десятка. Можно написать батник (пароли юзеров известны). Но, может быть, есть способ экспорта-импорта?
Оффтоп.
Отвечу парой предложений.
Получаете список пользователей на w2k3: net user>>c:\log\exp_usr.bat
Потом руками преобразовать файл в формат:
net user user1 p»ssword /ADD
net user user2 p@ssword /ADD
….
Полученный bat файл запустить на ws2012r2
а можно сделать образец для изменения настроек сети со статических адресов на динамическое получение по DHCP?
само собой все компьютеры в домене
Можно использовать такой скрипт PowerShell скрипт для переключения клиента на DHCP и запускать его через GPO для десктопных версий Windows:
$IPType = "IPv4"
$adapter = Get-NetAdapter | ?
$interface = $adapter | Get-NetIPInterface -AddressFamily $IPType
If ($interface.Dhcp -eq "Disabled") If (($interface | Get-NetIPConfiguration).Ipv4DefaultGateway) $interface | Remove-NetRoute -Confirm:$false
>
$interface | Set-NetIPInterface -DHCP Enabled
$interface | Set-DnsClientServerAddress -ResetServerAddresses
>
Использую скрипт включение DHCP через GPO на запуск ПК. По логам скрипт отрабатывает, но настройка сетевого адаптера не меняются. Как быть?
Вы запускаете его через логон скрипт? Скрипт не отрабатывает только через GPO, при ручном запуске работает?
Добрый день!
Как можно в «свойствах адаптера» на вкладке «Доступ» убрать, а потом поставить крыжик «Разрешить другим пользователям сети использовать подключение к Интернету»?
Надо чтоб это можно было запускать в командном файле.
RNDIS отваливается постоянно и лечится только такой процедурой.
Когда выполняю команду
Get-NetIPConfiguration -All -Detailed | Where-Object
то получаю следующий результат:
Example 1: Update all DNS names
This example performs a DNS dynamic update on all of the interfaces configured on the computer.
Читайте также: