Permettez à vos techniciens itinérants sous Windows 10/11 de basculer eux‑mêmes entre DHCP et IP statique sans droits d’administrateur local, tout en gardant la maîtrise via Active Directory/ GPO. Ce guide détaille une mise en œuvre robuste, auditée et réversible.
Autoriser des utilisateurs à passer de DHCP à une IP statique (et inversement)
Vue d’ensemble
Contexte : domaine Active Directory (Windows Server 2012), postes Windows 10/11, techniciens itinérants. Besoin : alternance DHCP <> IP statique sans droits d’administrateur local. La solution tient en trois piliers : 1) déléguer localement l’appartenance au groupe “Network Configuration Operators”, 2) lever les blocages GPO qui empêchent l’accès aux propriétés réseau, 3) proposer des bascules assistées (scripts PowerShell + Tâches planifiées en exécution élevée) afin d’obtenir un résultat fiable et traçable, même lorsque l’interface graphique demande une élévation (UAC).
Points clefs à retenir
- L’appartenance à Network Configuration Operators (NCO) doit être locale sur chaque poste. L’ajouter uniquement sur un contrôleur de domaine n’accorde aucun droit sur les clients.
- Des GPO “durcies” sur Network Connections bloquent souvent la modification TCP/IP malgré NCO.
- Sur Windows 10/11, la nouvelle application Paramètres peut solliciter l’UAC : privilégiez
ncpa.cpl
(Panneau de configuration classique) ou des scripts lancés via une tâche planifiée exécutée en SYSTEM. - Il n’existe pas de droit local “Modify TCP/IP settings” à attribuer finement par User Rights Assignment. La délégation pertinente reste NCO, complétée si besoin par une automatisation contrôlée.
Réponse & solutions proposées
Piste | Détails pratiques | Points de vigilance |
---|---|---|
1. Vérifier et appliquer la bonne appartenance locale | Créez un groupe global AD, p. ex. Tech_IP. Créez/éditez une GPO liée à l’OU des postes : Computer Configuration → Preferences → Control Panel Settings → Local Users and Groups. Action Update sur le groupe local Network Configuration Operators et ajoutez “Tech_IP” comme membre (ne remplacez pas la liste complète). gpupdate /force sur un poste, puis vérifiez : net localgroup "Network Configuration Operators" . | Préférez Local Users and Groups (GPP) à “Restricted Groups” (ce dernier remplace l’appartenance et peut enlever d’autres comptes attendus). L’appartenance doit exister sur chaque client. |
2. Lever d’éventuelles restrictions de GPO | Inspectez les GPO qui ciblent : User Configuration → Administrative Templates → Network → Network Connections : Prohibit access to properties of a LAN connection Prohibit access to properties of components of a LAN connection Prohibit TCP/IP advanced configuration Ability to rename/disable a connection (selon versions) Éventuels WMI filters mal ciblés. Après correction : gpupdate /force puis test via ncpa.cpl . | Un seul paramètre prohibitif suffit à bloquer l’UI. Validez avec gpresult /h c:\temp\gp.html et rsop.msc . |
3. Emballer la bascule dans une Tâche planifiée (SYSTEM) | Déployez deux scripts signés : Set-Dhcp.ps1, Set-Static.ps1 (voir plus bas). Via GPP : Computer Configuration → Preferences → Control Panel Settings → Scheduled Tasks → New → Task (At least Windows 7). Run as : SYSTEM , cochez Run with highest privileges, Allow task to be run on demand, aucun déclencheur (exécution à la demande). Action : powershell.exe -ExecutionPolicy Bypass -File "C:\ProgramData\Company\Net\Set-Dhcp.ps1" (ou Set-Static.ps1). Créez un raccourci pour les techniciens : schtasks /Run /TN "\Company\Network\SwitchDHCP" et ...\SwitchStatic . | Assurez les droits d’exécution de la tâche à votre groupe Tech_IP (SDDL/ACL de la tâche ou dossier de tâches planifiées dédié). La tâche s’exécute en SYSTEM, pas besoin d’UAC. |
4. Solution scriptée/automatisée | Fournissez deux scripts PowerShell (signés) qui nettoient correctement les anciennes routes/DNS, basculent DHCP <> IP statique, et journalisent dans l’Observateur d’événements. Distribution via GPO (fichiers), Intune (Win32/PowerShell) ou logiciel interne. | Exécutez via Tâche planifiée élevée pour éviter tout prompt UAC. Manipulez l’alias d’interface avec précaution (“Ethernet”, “Wi‑Fi”, NIC physiques). |
5. Alternatives modernes (facultatives) | Intune/MDM : déployer les scripts en Run as SYSTEM, proposer un “Self‑service” (Company Portal) pour chaque site. Snapshots netsh : netsh interface ipv4 dump pour exporter des configurations par site et les restaurer à la demande (attention à l’alias d’interface). | Les CSP ne couvrent pas tous les cas d’IP statiques : script reste le plus souple. |
Procédure détaillée — mise en place recommandée
Périmètre et prérequis
- AD Windows Server 2012 (fonctionnera aussi sous 2012 R2+).
- Postes Windows 10/11, réseau filaire principalement.
- Comptes techniques membres d’un groupe AD Tech_IP.
Étape 1 — Déléguer la configuration réseau localement
- Dans la console GPMC, créez une GPO : “Delegation_Network_Config”, liez-la à l’OU des PC.
- Éditez : Computer Configuration → Preferences → Control Panel Settings → Local Users and Groups.
- New → Local Group, Action = Update, Group name = Network Configuration Operators (groupe local intégré), bouton Add → ajoutez le groupe global Tech_IP.
- Forcer la GPO sur un poste pilote :
gpupdate /force
. Vérifier :net localgroup "Network Configuration Operators" whoami /groups | findstr /i "Network Configuration Operators"
- Test UI “classique” (recommandé) : Win+R →
ncpa.cpl
→ clic droit sur l’adaptateur → Propriétés → IPv4/IPv6 → Propriétés.
Étape 2 — Lever les blocages GPO
Si l’UI refuse l’accès malgré NCO :
- Vérifiez les stratégies sous User Configuration → Administrative Templates → Network → Network Connections (voir tableau ci‑dessus) et tout durcissement “Control Panel/Network and Internet”.
- Contrôlez d’éventuels WMI filters exclusifs et l’“Item‑level targeting”.
- Exécutez
gpresult /h c:\temp\gp.html
pour identifier l’origine des paramètres effectifs.
Étape 3 — Offrir une bascule “one‑click” sûre (Tâche planifiée en SYSTEM)
- Stockez vos scripts dans
C:\ProgramData\Company\Net\
(droits : lecture pour Users, écriture/gestion pour Admins). - Créez deux tâches planifiées via GPP (Task (At least Windows 7)) :
- \Company\Network\SwitchDHCP → Action :
powershell.exe -ExecutionPolicy Bypass -File "C:\ProgramData\Company\Net\Set-Dhcp.ps1"
- \Company\Network\SwitchStatic → Action :
powershell.exe -ExecutionPolicy Bypass -File "C:\ProgramData\Company\Net\Set-Static.ps1" -InterfaceAlias "Ethernet" -IPAddress 192.168.10.25 -PrefixLength 24 -DefaultGateway 192.168.10.1 -DnsServers 192.168.10.10,192.168.10.11
- \Company\Network\SwitchDHCP → Action :
- Créez deux raccourcis distribués aux techniciens :
%SystemRoot%\System32\schtasks.exe /Run /TN "\Company\Network\SwitchDHCP" %SystemRoot%\System32\schtasks.exe /Run /TN "\Company\Network\SwitchStatic"
- Si nécessaire, accordez explicitement Lire/Exécuter sur les tâches (DACL/SDDL) à Tech_IP, ou placez les tâches dans un dossier de tâches propriétaire de l’IT avec droits “Exécuter” pour ce groupe.
Scripts PowerShell prêts à l’emploi
Set‑Dhcp.ps1 (IPv4/IPv6, nettoyage DNS & routes)
Param(
[string]$InterfaceAlias = $(Get-NetAdapter -Physical |
Where-Object {$_.Status -eq 'Up'} |
Sort-Object ifIndex | Select-Object -First 1 -ExpandProperty Name),
[switch]$IPv6 = $true
)
# Journalisation simple
$Log = "C:\ProgramData\Company\Net\switchip.log"
"$([DateTime]::Now) - Switch to DHCP on '$InterfaceAlias'" | Out-File -FilePath $Log -Append -Encoding utf8
try {
# IPv4 - suppression des IP statiques et de la route défaut
$ipv4 = Get-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -ErrorAction SilentlyContinue
if ($ipv4) { $ipv4 | Remove-NetIPAddress -Confirm:$false }
Get-NetRoute -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -DestinationPrefix "0.0.0.0/0" -ErrorAction SilentlyContinue |
Remove-NetRoute -Confirm:$false
# DNS - réinitialisation
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ResetServerAddresses -ErrorAction Stop
# Activation DHCP
Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -Dhcp Enabled -ErrorAction Stop
if ($IPv6) {
Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -Dhcp Enabled -ErrorAction SilentlyContinue
}
# Renouvellement
ipconfig /renew "$InterfaceAlias" | Out-Null
"$([DateTime]::Now) - DHCP: OK" | Out-File -FilePath $Log -Append -Encoding utf8
exit 0
}
catch {
"$([DateTime]::Now) - DHCP: ERROR - $($_.Exception.Message)" | Out-File -FilePath $Log -Append -Encoding utf8
exit 1
}
Set‑Static.ps1 (paramétrable, idempotent)
Param(
[Parameter(Mandatory=$true)][string]$InterfaceAlias,
[Parameter(Mandatory=$true)][string]$IPAddress,
[Parameter(Mandatory=$true)][int]$PrefixLength,
[Parameter(Mandatory=$true)][string]$DefaultGateway,
[Parameter(Mandatory=$true)][string[]]$DnsServers,
[switch]$IPv6 = $false
)
$Log = "C:\ProgramData\Company\Net\switchip.log"
"$([DateTime]::Now) - Switch to STATIC on '$InterfaceAlias' / $IPAddress/$PrefixLength via $DefaultGateway (DNS: $($DnsServers -join ','))" |
Out-File -FilePath $Log -Append -Encoding utf8
try {
# Désactivation DHCP IPv4 & nettoyage
Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -Dhcp Disabled -ErrorAction Stop
Get-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -ErrorAction SilentlyContinue |
Remove-NetIPAddress -Confirm:$false
Get-NetRoute -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -DestinationPrefix "0.0.0.0/0" -ErrorAction SilentlyContinue |
Remove-NetRoute -Confirm:$false
# Application de l'IP statique + passerelle + DNS
New-NetIPAddress -InterfaceAlias $InterfaceAlias -IPAddress $IPAddress -PrefixLength $PrefixLength -DefaultGateway $DefaultGateway -ErrorAction Stop
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses $DnsServers -ErrorAction Stop
if ($IPv6) {
# Exemple minimal pour IPv6 statique si nécessaire (adapter à votre plan d'adressage)
# Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -Dhcp Disabled
# New-NetIPAddress -InterfaceAlias $InterfaceAlias -IPAddress 2001:db8::25 -PrefixLength 64 -DefaultGateway 2001:db8::1
# Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -ServerAddresses 2001:db8::53
}
ipconfig /flushdns | Out-Null
"$([DateTime]::Now) - STATIC: OK" | Out-File -FilePath $Log -Append -Encoding utf8
exit 0
}
catch {
"$([DateTime]::Now) - STATIC: ERROR - $($_.Exception.Message)" | Out-File -FilePath $Log -Append -Encoding utf8
exit 1
}
Conseil signature : publiez un certificat de signature de code (AC interne) et appliquez ExecutionPolicy = AllSigned pour le groupe Tech_IP via GPO (scope utilisateur). Les scripts seront ensuite exécutés en SYSTEM via la Tâche planifiée, donc sans invite UAC.
Variants et options avancées
Profils par site (JSON/CSV)
Si vos techniciens ont plusieurs sites, stockez des profils lisibles par le script :
[
{"Site":"Paris","InterfaceAlias":"Ethernet","IPAddress":"192.168.10.25","PrefixLength":24,"DefaultGateway":"192.168.10.1","DnsServers":["192.168.10.10","192.168.10.11"]},
{"Site":"Lyon","InterfaceAlias":"Ethernet","IPAddress":"10.20.30.25","PrefixLength":24,"DefaultGateway":"10.20.30.1","DnsServers":["10.20.30.10","10.20.30.11"]}
]
Ajoutez un paramètre -Site Paris
dans Set-Static.ps1 pour charger automatiquement les valeurs (sélection par fenêtre Out‑GridView ou menu console).
Export/restore netsh (méthode “instantanés”)
netsh interface ipv4 dump > C:\ProgramData\Company\Net\Static-Paris.cmd
netsh interface ipv4 set address name="Ethernet" source=dhcp
netsh interface ip set dns "Ethernet" dhcp
Avantage : scripts CMD très simples ; inconvénient : l’alias d’interface doit correspondre partout, et la méthode est moins lisible/traçable qu’avec PowerShell.
Intune / MDM
Publiez vos bascules comme Win32 apps ou scripts PowerShell (exécution System) avec raccourcis “Installer/Désinstaller” qui appellent respectivement Set-Static.ps1
et Set-Dhcp.ps1
. L’utilisateur déclenche via Company Portal, vous gardez un retour d’état.
Audit, traçabilité et support
Journaux utiles
- Security : activez les stratégies d’audit avancées “Policy Change” (pour tracer les opérations pilotées par vos scripts si vous y écrivez des événements).
- Microsoft‑Windows‑TCPIP/Operational et Dhcp‑Client/Operational : ajout/retrait d’adresses, renouvellements DHCP.
- Journal applicatif : faites écrire vos scripts (succès/erreur) dans un fichier commun
switchip.log
et/ou dans l’EventLog (source d’événement pré‑créée via GPO de démarrage).
Dépannage – checklist express
Symptôme | Vérification | Remède |
---|---|---|
“Vous n’avez pas les autorisations…” dans les propriétés IPv4 | net localgroup "Network Configuration Operators" inclut‑il Tech_IP ? GPO bloquantes ? | Assurez l’appartenance locale via GPP ; neutralisez “Prohibit …” sous Network Connections. |
L’UI Paramètres demande des identifiants admin | Test via ncpa.cpl ou via la Tâche planifiée (SYSTEM) | Standardisez la bascule par scripts + tâches ; évitez de baisser UAC globalement. |
Bascule DHCP sans DNS | ipconfig /all – serveurs DNS vides | Vérifiez Set-DnsClientServerAddress -ResetServerAddresses dans Set‑Dhcp.ps1. |
Conflit d’adresse “déjà utilisée” | Ping l’IP avant affectation | Ajoutez un pré‑check dans le script : Test-Connection -Quiet -Count 1 . |
Wi‑Fi touché à la place du LAN | Alias d’interface mal ciblé | Filtrez Get-NetAdapter -Physical et imposez -InterfaceAlias par site. |
L’utilisateur ne peut pas déclencher la tâche | Erreur “Accès refusé” avec schtasks /Run | Accordez Lire/Exécuter sur la tâche au groupe Tech_IP (DACL/SDDL) ou créez un dossier de tâches avec ces droits. |
Bonnes pratiques et garde‑fous
- Ne donnez pas “Administrators” pour un simple besoin de bascule réseau : NCO + automatisation suffisent.
- “Power Users” n’aide pas pour la configuration TCP/IP depuis Windows Vista : inutile de l’employer.
- Ne désactivez pas UAC globalement : contournez les prompts par scripts exécutés en SYSTEM et UI “classique”.
- Standardisez les alias d’interface (ex. “Ethernet”) via GPP (Registry) ou Intune, pour que les scripts soient universels.
- Documentez chaque site : IP, masque/PrefixLength, passerelle, DNS, VLAN, remarques de sécurité (NAC/802.1X).
- Testez hors production (réseau isolé) pour valider les scripts et les retours d’état.
FAQ
Q : L’appartenance NCO suffit‑elle toujours ?
R : Elle est nécessaire et souvent suffisante si aucune GPO ne bloque l’UI. Toutefois, la nouvelle application Paramètres peut encore demander une élévation. La voie fiable est d’exposer des scripts via Tâche planifiée en SYSTEM.
Q : Peut‑on attribuer un droit “modifier TCP/IP” dans “User Rights Assignment” ?
R : Non. Il n’existe pas de droit de ce type granulaire. Le design Windows s’appuie sur l’appartenance au groupe Network Configuration Operators. Pour éviter l’UAC, utilisez l’automatisation (tâche SYSTEM).
Q : Comment gérer IPv6 ?
R : Par défaut, laissez IPv6 en DHCP/Auto. Si vous avez de l’IPv6 statique, étendez le script Set‑Static avec des paramètres IPv6 (adresse, /64, passerelle, DNS), ou gardez l’IPv6 automatique et forcez uniquement IPv4 en statique selon vos besoins d’accès site.
Q : Et les VLAN/802.1X ?
R : La bascule IP n’affecte pas l’authentification 802.1X ni l’assignation VLAN par switch/NAC. Assurez‑vous que l’interface cible est autorisée (profil 802.1X) et que l’IP statique correspond au VLAN attendu.
Q : Puis‑je limiter la bascule à certains sites ?
R : Oui. Filtrez l’affectation des tâches/raccourcis par Item‑level targeting (groupe, OU, AD Site, plage IP) et maintenez des fichiers JSON/CSV de profils par site.
Exemple complet de déploiement (pas à pas)
- Créer le groupe global AD Tech_IP.
- GPO “Delegation_Network_Config” :
- Computer → Preferences → Local Users and Groups → ajouter Tech_IP au groupe local Network Configuration Operators.
- User → Policies → Administrative Templates → Network → Network Connections → mettre Not Configured pour toute stratégie “Prohibit …”.
- Copier Set-Dhcp.ps1 et Set-Static.ps1 dans
C:\ProgramData\Company\Net\
. - GPP “Scheduled Tasks” :
- Tâche \Company\Network\SwitchDHCP (SYSTEM, Highest, on demand).
- Tâche \Company\Network\SwitchStatic (SYSTEM, Highest, on demand).
- “Common” → Item‑level targeting = groupe Tech_IP.
- Distribuer deux raccourcis sur le bureau des membres de Tech_IP.
- Valider sur 2–3 sites pilotes, mesurer l’impact (logs, tickets), puis généraliser.
Conclusion
En appliquant la délégation locale NCO et en neutralisant les GPO bloquantes, la majorité des environnements voient la bascule DHCP <> IP statique fonctionner immédiatement, sans droits d’admin. Pour fiabiliser et industrialiser, emballez la bascule dans une Tâche planifiée exécutée en SYSTEM pilotant des scripts PowerShell signés. Vous obtenez un geste utilisateur one‑click, sans UAC, complètement traçable, et compatible Windows 10/11 / AD 2012.
Annexes — snippets utiles
Renommer l’interface pour standardiser l’alias
Get-NetAdapter -Physical | Where-Object Status -eq 'Up' | Select-Object Name, InterfaceDescription
Rename-NetAdapter -Name "Realtek PCIe GbE Family Controller" -NewName "Ethernet"
Pré‑check “IP libre” avant statique
$Ip = "192.168.10.25"
if (Test-Connection -ComputerName $Ip -Count 1 -Quiet) {
Write-Host "Adresse déjà utilisée, choisissez-en une autre." -ForegroundColor Yellow
exit 2
}
Vérifier les membres NCO en masse
$computers = Get-ADComputer -SearchBase "OU=PC,DC=contoso,DC=local" -Filter *
foreach ($c in $computers) {
$cmd = "net localgroup `"Network Configuration Operators`""
Invoke-Command -ComputerName $c.Name -ScriptBlock { cmd.exe /c $using:cmd } |
Select-String -Pattern "Tech_IP" | ForEach-Object { "$($c.Name): OK" }
}
Désactiver l’accès à l’UI Paramètres réseau (option)
Pour éviter les chemins UI sources de confusion, vous pouvez masquer les pages réseau modernes et n’exposer que vos raccourcis de tâches (GPO User → Administrative Templates, selon version). Gardez l’accès ncpa.cpl
pour le support.
Erreurs fréquentes à éviter
- Ajouter Tech_IP dans NCO sur un contrôleur de domaine en pensant que cela s’appliquera aux postes clients.
- Utiliser “Restricted Groups” en mode Replace et perdre des membres locaux légitimes du groupe.
- Confondre “Power Users” avec un droit de configuration réseau (ce n’est plus le cas depuis Vista).
- Désactiver UAC globalement pour “régler” les prompts de l’UI Paramètres.
- Oublier de réinitialiser les serveurs DNS lors du passage en DHCP.
- Appliquer une IP statique sans retirer la route par défaut précédente et se retrouver avec des routes contradictoires.
Récapitulatif exécutif
- Délégation : Tech_IP → GPP “Local Users and Groups” → membre de Network Configuration Operators sur chaque poste.
- Déblocage : remettez Not Configured aux stratégies “Prohibit …” sur Network Connections.
- Expérience : 2 raccourcis = 2 tâches planifiées (SYSTEM) qui appellent des scripts signés (Set‑Dhcp / Set‑Static) avec journalisation.
- Traçabilité : logs fichier + EventLog, rapports
gpresult
, activation des journaux TCP/IP/DHCP.
En appliquant la solution d’appartenance locale (NCO) et, si nécessaire, la variante automatisée par Tâche planifiée, vous obtenez une bascule DHCP/IP statique fiable, sécurisée, sans élévation manuelle, parfaitement adaptée aux techniciens itinérants.