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 Web | Description |
---|---|
Msdn.microsoft.com | Win32_NetworkAdapter class |
Msdn.microsoft.com | SetIPConnectionMetric method |
Microsoft KB2526067 | How to change the network connection priority in Windows 7 |
Article(s) suivant(s)
Article(s) précédent(s)