Powershell:在未插电的 NIC 上配置静态 IP

Powershell:在未插电的 NIC 上配置静态 IP

我正在尝试找到一种方法,在拔下网卡的情况下在 Windows 10 IOT 设备上配置永久静态 IP。我有一个脚本需要在设备安装到位之前在设备上运行,其中一部分是配置网卡。当我使用以下内容时: 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 我尝试在使用 New-NetIpAddress 命令之前明确关闭 DHCP Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled,但还是收到同样的错误。

有什么建议么?

答案1

您需要删除已分配给适配器的现有 DHCP IP 地址。您还应该为接口设置 DNS 服务器。我在下面提供了一个示例,但将 xxx.xxx.xxx.xxx 替换为您的 DNS 服务器 IP 地址。

然后您需要在 PersistentStore 中的此接口的注册表中禁用 DHCP,然后才能设置 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/

答案2

我在 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

相关内容