c # - Hent primære ip-adresse med WMI

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har udviklet et program i C # ved hjælp af WMI-ledelsesklasser for dynamisk at tilføje og fjerne IP-adresser til en specifik netværksadapter. Alt fungerer fint indtil nu, men jeg kan ikke afvige mellem de 'primære' og 'sekundære' IP-adresser. Jeg skal kende denne primære adresse for at forhindre at fjerne den fra adapteren.


Med 'primær' mener jeg, at den specifikke IP-adresse heks er vist på den første side af netværksadapter egenskaber.


Ved hjælp af netsh svarer rækkefølgen af ​​resultatet til denne specifikke ordre med den primære adresse først og derefter den sekundære. Med WMI og powerhell er adressen sorteret fra (numerisk) størst til mindste værdi.


Kan jeg påvirke denne adfærd, eller har du en ide om, hvordan du bestemmer netværksadapterens første/primære adresse? Jeg har brug for den samme rækkefølge som returneret af netsh eller som vist i Windows GUI.


Sådan indstiller jeg de statiske IP-adresser, ConfigurationManagmentObject er et Win32\_NetworkAdapterConfiguration WMI-objekt:


//Bulding the network address list to set
var addressList = new List<NetworkAddress>();
addressList.Add(this.PrimaryIpAddress);
addressList.AddRange(SecondaryIpAddresses);

// Set IPAddress and Subnet Mask
var enableStaticParameters = this.ConfigurationManagmentObject.GetMethodParameters("EnableStatic");
var addresses = new List<string>(finalList.Select(o => o.IpAddress));
enableStaticParameters["IPAddress"] = addresses.ToArray();
var subnets = new List<string>(finalList.Select(o => o.Subnet));
enableStaticParameters["SubnetMask"] = subnets.ToArray();
var result = this.ConfigurationManagmentObject.InvokeMethod("EnableStatic", enableStaticParameters, null);


Og sådan henter jeg de indstillede adresser:


var ipAddresses = (string[])this.ConfigurationManagmentObject.Properties.Cast<PropertyData>().Where(p => p.Name == "IPAddress").Select(p => p.Value).FirstOrDefault();


Ordren af ​​listen jeg indstiller afspejles ikke af den liste, jeg får fra den anden kode. Men det afspejles af netsh og windows GUI

Bedste reference