TUTOS.EU

Mettre prioritaire une carte réseau passant par un câble par rapport à une carte wifi

Quand vous avez 2 cartes réseaux, mettre la priorité sur celle qui est passe par un câble et non sur celle qui passe par le wifi

En powershell, il est assez facile de modifier la priorité d'une carte réseau par rapport à une autre.
Pour lister vos cartes avec leur priorité actuelle, entrez cette commande :

Get-NetIPInterface | where {$_.AddressFamily -eq "IPv4"} | Select InterfaceAlias, InterfaceMetric, ConnectionState| sort-object -property InterfaceAlias
Lien vers le fichier : cliquez ici

Dans cet exemple, on voit que la carte nommée Ethernet a un poids de 25, soit le même que celui de la carte wifi

L'idée est de mettre un poids plus faible, un coût plus faible pour la carte réseau filaire. Comme son coût actuel est de 25, on va le mettre à 10 en utilisant cette commande :

Get-NetIPInterface | where {$_.AddressFamily -eq "IPv4" -and $_.InterfaceAlias -eq "Ethernet"} | Set-NetIpInterface -InterfaceMetric 10
Lien vers le fichier : cliquez ici

Suite à quoi, si on réaffiche la priorité des différentes cartes réseaux, celle nommée Ethernet a maintenant un poids de 10, pas de 25.
Elle sera donc utilisé en priorité par rapport à la carte wifi qui a un poids de 25 :

Pour archive, anciennement j'indiquais qu'on pouvait accéder aux cartes réseaux avec la commande
ncpa.cpl

Pour différencier facilement en ligne de commande une carte réseau filaire d'une carte réseau Wifi, le plus simple est de mettre le mot clé "wifi" dans le nom de votre carte réseau wifi

Il faudra lancer le script avec une élévation de privilèges pour qu'il fonctionne. On va donc lancer une fenêtre de commande avec une élévation de privilèges

Et lancez le vbscript via cscript de préférence

On va utiliser la méthode SetIPConnectionMetric de la classe Win32_NetworkAdapterConfiguration

On Error Resume Next

Dim strComputer, objWMIService
Dim varConnectionID, strMACAddress, strInterfaceIndex, varIPAddress, varGateway
Dim regValueDataMetric
Dim WSHShell, Commande, varChangeRouteCommand

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'Option Explicit

regValueDataMetric = "35"

Wscript.Echo "Listage de toutes les cartes reseau dans Win32_NetworkAdapter."
Wscript.Echo "Win32_NetworkAdapter permet de recuperer le nom de la carte reseau que l on voit dans les connexions reseau."
Wscript.Echo "La carte wifi sera reperee via son nom ou vous aurez au prealable mit le mot cle : wifi"
Wscript.Echo "On retiendra alors son adresse MAC"
'Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdapter Where NetConnectionID = 'Wireless Network Connection'")
Set colItems = objWMIService.ExecQuery("Select * From Win32_NetworkAdapter")

For Each objItem in colItems

	varConnectionID = objItem.NetConnectionID
	varConnectionID = Trim(varConnectionID)
	If Len(varConnectionID) > 0 Then
		Wscript.Echo "NetConnectionID: " & varConnectionID 'Nom affiche sous Windows"

		'Position = InStr(1, Lcase(objItem.Name), "802.11")
		Position = InStr(1, Lcase(objItem.NetConnectionID), "wifi") 'On recherche le mot "wifi" au niveau du nom de la carte réseau
		
		If Position > 0 Then 'Si on a trouvé une carte réseau qui contient le mot "wifi" dans son nom
			Wscript.Echo VbTab & "La carte contient le mot cle wifi !"
			Wscript.Echo ""

			Wscript.Echo VbTab & "Name: " & objItem.Name
			Wscript.Echo VbTab & "Description: " & objItem.Description
			Wscript.Echo VbTab & "Caption : " & objItem.Caption	
			strMACAddress = objItem.MACAddress
			strInterfaceIndex = objItem.InterfaceIndex
			Wscript.Echo VbTab & "MACAddress: " & strMACAddress
			Wscript.Echo VbTab & "Interface Index: " & strInterfaceIndex

			If 1 = 2 Then
				Wscript.Echo VbTab & "-----------------------------------"
				Wscript.Echo VbTab & "Win32_NetworkAdapter instance"
				Wscript.Echo VbTab & "-----------------------------------"
				Wscript.Echo VbTab & "AdapterType: " & objItem.AdapterType
				Wscript.Echo VbTab & "AdapterTypeId: " & objItem.AdapterTypeId
				Wscript.Echo VbTab & "AutoSense: " & objItem.AutoSense
				Wscript.Echo VbTab & "Availability: " & objItem.Availability
				Wscript.Echo VbTab & "Caption: " & objItem.Caption
				Wscript.Echo VbTab & "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
				Wscript.Echo VbTab & "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
				Wscript.Echo VbTab & "CreationClassName: " & objItem.CreationClassName
				Wscript.Echo VbTab & "Description: " & objItem.Description
				Wscript.Echo VbTab & "DeviceID: " & objItem.DeviceID
				Wscript.Echo VbTab & "ErrorCleared: " & objItem.ErrorCleared
				Wscript.Echo VbTab & "ErrorDescription: " & objItem.ErrorDescription
				Wscript.Echo VbTab & "GUID: " & objItem.GUID
				Wscript.Echo VbTab & "Index: " & objItem.Index
				Wscript.Echo VbTab & "InstallDate: " & objItem.InstallDate
				Wscript.Echo VbTab & "Installed: " & objItem.Installed
				Wscript.Echo VbTab & "InterfaceIndex: " & objItem.InterfaceIndex
				Wscript.Echo VbTab & "LastErrorCode: " & objItem.LastErrorCode
				Wscript.Echo VbTab & "MACAddress: " & objItem.MACAddress
				Wscript.Echo VbTab & "Manufacturer: " & objItem.Manufacturer
				Wscript.Echo VbTab & "MaxNumberControlled: " & objItem.MaxNumberControlled
				Wscript.Echo VbTab & "MaxSpeed: " & objItem.MaxSpeed
				Wscript.Echo VbTab & "Name: " & objItem.Name
				Wscript.Echo VbTab & "NetConnectionID: " & objItem.NetConnectionID
				Wscript.Echo VbTab & "NetConnectionStatus: " & objItem.NetConnectionStatus
				Wscript.Echo VbTab & "NetEnabled: " & objItem.NetEnabled
				If isNull(objItem.NetworkAddresses) Then
					Wscript.Echo VbTab & "NetworkAddresses: "
				Else
					Wscript.Echo VbTab & "NetworkAddresses: " & Join(objItem.NetworkAddresses, ",")
				End If
				Wscript.Echo VbTab & "PermanentAddress: " & objItem.PermanentAddress
				Wscript.Echo VbTab & "PhysicalAdapter: " & objItem.PhysicalAdapter
				Wscript.Echo VbTab & "PNPDeviceID: " & objItem.PNPDeviceID
				If isNull(objItem.PowerManagementCapabilities) Then
					Wscript.Echo VbTab & "PowerManagementCapabilities: "
				Else
					Wscript.Echo VbTab & "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",")
				End If
				Wscript.Echo VbTab & "PowerManagementSupported: " & objItem.PowerManagementSupported
				Wscript.Echo VbTab & "ProductName: " & objItem.ProductName
				Wscript.Echo VbTab & "ServiceName: " & objItem.ServiceName
				Wscript.Echo VbTab & "Speed: " & objItem.Speed
				Wscript.Echo VbTab & "Status: " & objItem.Status
				Wscript.Echo VbTab & "StatusInfo: " & objItem.StatusInfo
				Wscript.Echo VbTab & "SystemCreationClassName: " & objItem.SystemCreationClassName
				Wscript.Echo VbTab & "SystemName: " & objItem.SystemName
				Wscript.Echo VbTab & "TimeOfLastReset: " & objItem.TimeOfLastReset
			End If
			
			Exit For
		End If
	
	End If

Next
Wscript.Echo ""
Wscript.Echo "Liste de toutes les cartes reseau avec IPEnabled a true contenues dans Win32_NetworkAdapterConfiguration"
Set colNetCard = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

For Each objNetCard in colNetCard
	
		For Each strIPAddress in objNetCard.IPAddress
			Wscript.Echo "Description: " & objNetCard.Description
			Wscript.Echo VbTab & "IP Address: " & strIPAddress
			If isNull(objNetCard.DefaultIPGateway) Then
				Wscript.Echo VbTab & "DefaultIPGateway: "
			Else
				Wscript.Echo VbTab & "DefaultIPGateway: " & Join(objNetCard.DefaultIPGateway, ",")
			End If
			varGateway = objNetCard.DefaultIPGateway(0)
			Wscript.Echo VbTab & "IPConnectionMetric: " & objNetCard.IPConnectionMetric
			
			If 1 = 2 Then
				Wscript.Echo VbTab & "ArpAlwaysSourceRoute: " & objNetCard.ArpAlwaysSourceRoute
				Wscript.Echo VbTab & "ArpUseEtherSNAP: " & objNetCard.ArpUseEtherSNAP
				Wscript.Echo VbTab & "Caption: " & objNetCard.Caption
				Wscript.Echo VbTab & "DatabasePath: " & objNetCard.DatabasePath
				Wscript.Echo VbTab & "DeadGWDetectEnabled: " & objNetCard.DeadGWDetectEnabled
				Wscript.Echo VbTab & "DefaultTOS: " & objNetCard.DefaultTOS
				Wscript.Echo VbTab & "DefaultTTL: " & objNetCard.DefaultTTL
				Wscript.Echo VbTab & "Description: " & objNetCard.Description
				Wscript.Echo VbTab & "DHCPEnabled: " & objNetCard.DHCPEnabled
				Wscript.Echo VbTab & "DHCPLeaseExpires: " & objNetCard.DHCPLeaseExpires
				Wscript.Echo VbTab & "DHCPLeaseObtained: " & objNetCard.DHCPLeaseObtained
				Wscript.Echo VbTab & "DHCPServer: " & objNetCard.DHCPServer
				Wscript.Echo VbTab & "DNSDomain: " & objNetCard.DNSDomain
				If isNull(objNetCard.DNSDomainSuffixSearchOrder) Then
					Wscript.Echo VbTab & "DNSDomainSuffixSearchOrder: "
				Else
					Wscript.Echo VbTab & "DNSDomainSuffixSearchOrder: " & Join(objNetCard.DNSDomainSuffixSearchOrder, ",")
				End If
				Wscript.Echo VbTab & "DNSEnabledForWINSResolution: " & objNetCard.DNSEnabledForWINSResolution
				Wscript.Echo VbTab & "DNSHostName: " & objNetCard.DNSHostName
				Wscript.Echo VbTab & "DomainDNSRegistrationEnabled: " & objNetCard.DomainDNSRegistrationEnabled
				Wscript.Echo VbTab & "ForwardBufferMemory: " & objNetCard.ForwardBufferMemory
				Wscript.Echo VbTab & "FullDNSRegistrationEnabled: " & objNetCard.FullDNSRegistrationEnabled
				If isNull(objNetCard.GatewayCostMetric) Then
					Wscript.Echo VbTab & "GatewayCostMetric: "
				Else
					Wscript.Echo VbTab & "GatewayCostMetric: " & Join(objNetCard.GatewayCostMetric, ",")
				End If
				Wscript.Echo VbTab & "IGMPLevel: " & objNetCard.IGMPLevel
				Wscript.Echo VbTab & "Index: " & objNetCard.Index
				Wscript.Echo VbTab & "InterfaceIndex: " & objNetCard.InterfaceIndex
				If isNull(objNetCard.IPAddress) Then
					Wscript.Echo VbTab & "IPAddress: "
				Else
					Wscript.Echo VbTab & "IPAddress: " & Join(objNetCard.IPAddress, ",")
				End If

				Wscript.Echo VbTab & "IPFilterSecurityEnabled: " & objNetCard.IPFilterSecurityEnabled
				Wscript.Echo VbTab & "IPPortSecurityEnabled: " & objNetCard.IPPortSecurityEnabled
				If isNull(objNetCard.IPSecPermitIPProtocols) Then
					Wscript.Echo VbTab & "IPSecPermitIPProtocols: "
				Else
					Wscript.Echo VbTab & "IPSecPermitIPProtocols: " & Join(objNetCard.IPSecPermitIPProtocols, ",")
				End If
				If isNull(objNetCard.IPSecPermitTCPPorts) Then
					Wscript.Echo VbTab & "IPSecPermitTCPPorts: "
				Else
					Wscript.Echo VbTab & "IPSecPermitTCPPorts: " & Join(objNetCard.IPSecPermitTCPPorts, ",")
				End If
				If isNull(objNetCard.IPSecPermitUDPPorts) Then
					Wscript.Echo VbTab & "IPSecPermitUDPPorts: "
				Else
					Wscript.Echo VbTab & "IPSecPermitUDPPorts: " & Join(objNetCard.IPSecPermitUDPPorts, ",")
				End If
				Wscript.Echo VbTab & "IPUseZeroBroadcast: " & objNetCard.IPUseZeroBroadcast
				Wscript.Echo VbTab & "IPXAddress: " & objNetCard.IPXAddress
				Wscript.Echo VbTab & "IPXEnabled: " & objNetCard.IPXEnabled
				If isNull(objNetCard.IPXFrameType) Then
					Wscript.Echo VbTab & "IPXFrameType: "
				Else
					Wscript.Echo VbTab & "IPXFrameType: " & Join(objNetCard.IPXFrameType, ",")
				End If
				Wscript.Echo VbTab & "IPXMediaType: " & objNetCard.IPXMediaType
				If isNull(objNetCard.IPXNetworkNumber) Then
					Wscript.Echo VbTab & "IPXNetworkNumber: "
				Else
					Wscript.Echo VbTab & "IPXNetworkNumber: " & Join(objNetCard.IPXNetworkNumber, ",")
				End If
				Wscript.Echo VbTab & "IPXVirtualNetNumber: " & objNetCard.IPXVirtualNetNumber
				Wscript.Echo VbTab & "KeepAliveInterval: " & objNetCard.KeepAliveInterval
				Wscript.Echo VbTab & "KeepAliveTime: " & objNetCard.KeepAliveTime
				Wscript.Echo VbTab & "MTU: " & objNetCard.MTU
				Wscript.Echo VbTab & "NumForwardPackets: " & objNetCard.NumForwardPackets
				Wscript.Echo VbTab & "PMTUBHDetectEnabled: " & objNetCard.PMTUBHDetectEnabled
				Wscript.Echo VbTab & "PMTUDiscoveryEnabled: " & objNetCard.PMTUDiscoveryEnabled
				Wscript.Echo VbTab & "ServiceName: " & objNetCard.ServiceName
				Wscript.Echo VbTab & "SettingID: " & objNetCard.SettingID
				Wscript.Echo VbTab & "TcpipNetbiosOptions: " & objNetCard.TcpipNetbiosOptions
				Wscript.Echo VbTab & "TcpMaxConnectRetransmissions: " & objNetCard.TcpMaxConnectRetransmissions
				Wscript.Echo VbTab & "TcpMaxDataRetransmissions: " & objNetCard.TcpMaxDataRetransmissions
				Wscript.Echo VbTab & "TcpNumConnections: " & objNetCard.TcpNumConnections
				Wscript.Echo VbTab & "TcpUseRFC1122UrgentPointer: " & objNetCard.TcpUseRFC1122UrgentPointer
				Wscript.Echo VbTab & "TcpWindowSize: " & objNetCard.TcpWindowSize
				Wscript.Echo VbTab & "WINSEnableLMHostsLookup: " & objNetCard.WINSEnableLMHostsLookup
				Wscript.Echo VbTab & "WINSHostLookupFile: " & objNetCard.WINSHostLookupFile
				Wscript.Echo VbTab & "WINSScopeID: " & objNetCard.WINSScopeID				
			End If

		   If isNull(objNetCard.DNSServerSearchOrder) Then
				Wscript.Echo VbTab & "DNSServerSearchOrder: "
			Else
				Wscript.Echo VbTab & "DNSServerSearchOrder: " & Join(objNetCard.DNSServerSearchOrder, ",")
			End If

			Wscript.Echo VbTab & "IPEnabled: " & objNetCard.IPEnabled
			If isNull(objNetCard.IPSubnet) Then
				Wscript.Echo VbTab & "IPSubnet: "
			Else
				Wscript.Echo VbTab & "IPSubnet: " & Join(objNetCard.IPSubnet, ",")
			End If
			Wscript.Echo VbTab & "MACAddress: " & objNetCard.MACAddress
			Wscript.Echo VbTab & "WINSPrimaryServer: " & objNetCard.WINSPrimaryServer
			Wscript.Echo VbTab & "WINSSecondaryServer: " & objNetCard.WINSSecondaryServer
			
			If objNetCard.MACAddress = strMACAddress Then
				varIPAddress = strIPAddress 'On retient l'adresse Ip dans une variable à part
				Wscript.Echo VbTab & "Adresse Ip de la carte : " & varIPAddress
				Wscript.Echo VbTab & ""
				Wscript.Echo VbTab & "C'est la carte qui a l adresse MAC recherchee"
				Wscript.Echo VbTab & "C'est donc une carte Wifi ! On passe sa metrique a " & regValueDataMetric & " qui est actuellement a " & objNetCard.IPConnectionMetric
				
 				intResult = objNetCard.SetIPConnectionMetric(regValueDataMetric)
				Wscript.Echo VbTab & "intResult : " & intResult
				Select Case intResult
					
					Case 0 Wscript.Echo VbTab & "Successful completion, no reboot required"
					Case 1 Wscript.Echo VbTab & "Successful completion, reboot required"
					Case 64 Wscript.Echo VbTab & "Method not supported on this platform"
					Case 65 Wscript.Echo VbTab & "Unknown failure"
					Case 66 Wscript.Echo VbTab & "Invalid subnet mask"
					Case 67 Wscript.Echo VbTab & "An error occurred while processing an Instance that was returned"
					Case 68 Wscript.Echo VbTab & "Invalid input parameter"
					Case 69 Wscript.Echo VbTab & "More than 5 gateways specified"
					Case 70 Wscript.Echo VbTab & "Invalid IP address"
					Case 71 Wscript.Echo VbTab & "Invalid gateway IP address"
					Case 72 Wscript.Echo VbTab & "An error occurred while accessing the Registry for the requested information"
					Case 73 Wscript.Echo VbTab & "Invalid domain name"
					Case 74 Wscript.Echo VbTab & "Invalid host name"
					Case 84 Wscript.Echo VbTab & "IP not enabled on adapter"
					Case 91 Wscript.Echo VbTab & "Access denied"
					Case 97 Wscript.Echo VbTab & "Interface not configurable"
					
				End Select
				Wscript.Echo VbTab & "La metrique est maintenant a " & regValueDataMetric

			End If
			Wscript.Echo ""
		Next
Next

'strInterfaceIndex

varChangeRouteCommand = "Route change 0.0.0.0 MASK 0.0.0.0 " & varGateway & " METRIC " & regValueDataMetric & " IF " & strInterfaceIndex
Wscript.Echo "Commande pour changer la metrique de la carte Wifi en modifiant la table de routage :"
Wscript.Echo varChangeRouteCommand

'Wscript.Echo "Avec un route print, vous pouvez aussi voir la metrique de priorite des cartes dans le champ Metrique"
'Set WSHShell = CreateObject("WScript.Shell")
'Commande = "cmd.exe /K route print"
'WSHShell.Run Commande
'Set WSHShell = Nothing
Lien vers le fichier : cliquez ici

Pages Web

Site WebDescription
Msdn.microsoft.comWin32_NetworkAdapter class
Msdn.microsoft.comSetIPConnectionMetric method
Microsoft KB2526067How to change the network connection priority in Windows 7

Article(s) précédent(s)