Powershell: настройка статического IP-адреса на неподключенной сетевой плате

Я пытаюсь найти способ настроить постоянный статический IP-адрес на устройствах IOT под управлением Windows 10 с отключенным Nic. У меня есть сценарий, который необходимо запустить на устройствах, прежде чем они будут на месте, и часть этого - настройка сетевых адаптеров. Когда я использую следующее:New-NetIpAddress -InterfaceIndex 10 -IpAddress 192.168.9.10 -PrefixLength 24 -DefaultGateway 192.168.9.1 -AddressFamily IPv4Я получаю ошибкуNew-NetIpAddress : Inconsistent parameters PolicyStore PersistentStore and Dhcp EnabledЯ попытался явно отключить DHCP с помощью Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled перед использованием команды New-NetIpAddress, но я получаю ту же ошибку.

Какие-либо предложения?

1 ответ

Решение

Вам необходимо удалить существующий IP-адрес DHCP, уже назначенный адаптеру. Вы также должны установить DNS-сервер для интерфейса. Ниже приведен пример, но замените xxx.xxx.xxx.xxx на IP-адрес вашего DNS-сервера.

Вам нужно отключить DHCP в реестре для этого интерфейса в PersistentStore, прежде чем вы сможете установить IP-адрес.

Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\$((Get-NetAdapter -InterfaceIndex 10).InterfaceGuid)” -Name EnableDHCP -Value 0
Remove-NetIpAddress -InterfaceIndex 10 -AddressFamily IPv4
Remove-NetRoute -InterfaceIndex 10 -AddressFamily IPv4 -Confirm:$false
New-NetIpAddress -InterfaceIndex 10 -IpAddress 192.168.9.10 -PrefixLength 24 -DefaultGateway 192.168.9.1 -AddressFamily IPv4
Set-DnsClientServerAddress -InterfaceIndex 10 -ServerAddresses "xxx.xxx.xxx.xxx"

Этот сайт имеет хороший пример и объяснение процесса: https://www.pdq.com/blog/using-powershell-to-set-static-and-dhcp-ip-addresses-part-1/

На этом сайте рассказывается о той же проблеме, что и у вас, и об ее решении: http://www.darrylvanderpeijl.com/inconsistent-parameters-policystore-persistentstore-and-dhcp-enabled/

У меня были проблемы с Windows 10 1909 со всем кодом, который я нашел, он казался непоследовательным. Приведенный ниже код работает для меня, выберите эксклюзивный код netsh или powershell:

$IP = $builddata.templateIP
$SubnetMaskBits = $builddata.Subnetmaskbits
$SubnetMask = $builddata.Subnetmask
$Gateway = $builddata.gateway
$Dns = $builddata.DNS1,$builddata.DNS2

$IPType = "IPv4"
$adapter = Get-NetAdapter | Where-Object {$_.InterfaceDescription -like "vmx*"} #looking for vmxnet3

# you can use either at this point
# via netsh

netsh interface ipv4 set interface $adapter.InterfaceIndex dadtransmits=0 store=persistent
netsh interface ip set address name="$($adapter.name)" static $IP $SubnetMask $Gateway 1

# via PowerShell

$adapter | Get-NetIPInterface | ? {$_.addressfamily -eq  $IPType} | % {Get-NetIPAddress | Remove-NetIPAddress -Confirm:$false}
$adapter | Get-NetIPInterface | New-NetIPAddress `
     -AddressFamily $IPType `
     -IPAddress $IP `
     -PrefixLength $SubnetMaskBits `
     -DefaultGateway $Gateway -Confirm:$false
Другие вопросы по тегам