When working with Windows 10 IoT devices in pre-deployment scenarios, you'll often encounter this specific error when trying to configure static IPs on unplugged network interfaces:
New-NetIpAddress : Inconsistent parameters PolicyStore PersistentStore and Dhcp Enabled
The root cause lies in how Windows handles network configuration persistence for disconnected adapters. The system tries to maintain consistency between the DHCP flag and the PolicyStore location where settings are saved.
Here's the complete sequence that works reliably:
# First disable DHCP explicitly with -PolicyStore ActiveStore
Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled -PolicyStore ActiveStore
# Then configure the static IP using the same active store
New-NetIPAddress -InterfaceIndex 10 -IPAddress 192.168.9.10
-PrefixLength 24 -DefaultGateway 192.168.9.1
-AddressFamily IPv4 -PolicyStore ActiveStore
# Finally persist these settings
Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled -PolicyStore PersistentStore
Set-NetIPAddress -InterfaceIndex 10 -PolicyStore PersistentStore
The key is handling the configuration in two phases:
- First apply changes to the active store (temporary memory)
- Then commit them to persistent store (registry)
For enterprise deployments, consider this robust version with error handling:
function Set-PersistentStaticIP {
param (
[int]$InterfaceIndex,
[string]$IPAddress,
[int]$PrefixLength,
[string]$Gateway
)
try {
# Temporary configuration in memory
Set-NetIPInterface -InterfaceIndex $InterfaceIndex
-Dhcp Disabled -PolicyStore ActiveStore -ErrorAction Stop
New-NetIPAddress -InterfaceIndex $InterfaceIndex
-IPAddress $IPAddress -PrefixLength $PrefixLength
-DefaultGateway $Gateway -AddressFamily IPv4
-PolicyStore ActiveStore -ErrorAction Stop
# Permanent configuration in registry
Set-NetIPInterface -InterfaceIndex $InterfaceIndex
-Dhcp Disabled -PolicyStore PersistentStore -ErrorAction Stop
Set-NetIPAddress -InterfaceIndex $InterfaceIndex
-PolicyStore PersistentStore -ErrorAction Stop
return $true
}
catch {
Write-Error "Configuration failed: $_"
return $false
}
}
# Usage example:
Set-PersistentStaticIP -InterfaceIndex 10
-IPAddress "192.168.9.10" -PrefixLength 24
-Gateway "192.168.9.1"
This approach has been validated across hundreds of Windows 10 IoT Core deployments, consistently working even when NICs are physically disconnected during configuration.
When deploying Windows 10 IoT devices in bulk, we often need to preconfigure network settings before physical deployment. A common roadblock occurs when trying to set static IPs on disconnected network interfaces through PowerShell. The standard approach fails with the confusing "Inconsistent parameters" error.
Windows enforces parameter validation that prevents static IP assignment when:
1. The NIC has no physical/link connection
2. DHCP is disabled in the persistent store
3. You attempt to set static IP parameters
This creates a chicken-and-egg situation where you can't configure the interface because it's disconnected, but you need it configured before deployment.
The most reliable method bypasses PowerShell's parameter validation by directly manipulating the network configuration registry keys:
# First disable DHCP for the interface
Set-NetIPInterface -InterfaceIndex 10 -Dhcp Disabled
# Then configure static IP via registry
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\"
$interfaceGuid = (Get-NetAdapter -InterfaceIndex 10).InterfaceGuid
$fullPath = $regPath + $interfaceGuid
New-ItemProperty -Path $fullPath -Name "IPAddress" -Value "192.168.9.10" -PropertyType MultiString -Force
New-ItemProperty -Path $fullPath -Name "SubnetMask" -Value "255.255.255.0" -PropertyType MultiString -Force
New-ItemProperty -Path $fullPath -Name "DefaultGateway" -Value "192.168.9.1" -PropertyType MultiString -Force
New-ItemProperty -Path $fullPath -Name "DefaultGatewayMetric" -Value "1" -PropertyType DWord -Force
New-ItemProperty -Path $fullPath -Name "EnableDHCP" -Value "0" -PropertyType DWord -Force
For environments where registry editing isn't ideal, the legacy netsh command still works reliably:
netsh interface ip set address name="Ethernet" static 192.168.9.10 255.255.255.0 192.168.9.1
netsh interface ip set dns name="Ethernet" static 8.8.8.8
netsh interface ip add dns name="Ethernet" 8.8.4.4 index=2
After applying either method, verify with:
Get-NetIPConfiguration -InterfaceIndex 10
Get-NetIPAddress -InterfaceIndex 10 | Where-Object {$_.AddressFamily -eq "IPv4"}
Get-NetRoute -InterfaceIndex 10
Remember that settings won't show as active until the interface establishes a link connection, but they are stored persistently.
When scripting this for mass deployment:
1. Always include error handling for interface detection
2. Log configuration changes
3. Consider adding a reboot trigger if needed
Here's a complete deployment-ready example:
try {
$adapter = Get-NetAdapter -Physical | Where-Object {$_.Status -eq "Disconnected"} | Select-Object -First 1
if ($adapter) {
Set-NetIPInterface -InterfaceIndex $adapter.InterfaceIndex -Dhcp Disabled
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" + $adapter.InterfaceGuid
New-ItemProperty -Path $regPath -Name "IPAddress" -Value "192.168.9.10" -PropertyType MultiString -Force
New-ItemProperty -Path $regPath -Name "SubnetMask" -Value "255.255.255.0" -PropertyType MultiString -Force
New-ItemProperty -Path $regPath -Name "DefaultGateway" -Value "192.168.9.1" -PropertyType MultiString -Force
Write-Host "Static IP configured for interface $($adapter.InterfaceIndex)"
}
} catch {
Write-Error "Configuration failed: $_"
}