Laden...

DHCP über WMI deaktivieren

Erstellt von Jazziroquai vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.364 Views
J
Jazziroquai Themenstarter:in
5 Beiträge seit 2010
vor 9 Jahren
DHCP über WMI deaktivieren

Hallo,
irgendwie stehe ich gerade auf dem Schlauch und hoffe ihr könnt mir weiterhelfen.
Ich möchte ein kleines Tool schreiben mit dem ich die IP und/oder Gateway der Clients auf statisch ändern kann, bzw. bei Bedarf DHCP wieder anstellen. Folgende Methode über WMI benutze ich dafür (nicht eigene, sie geistert durchs Internet):


using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Management;

//Modify IP Address, Subnet Mask, Default Gateway, DNS and ALternate DNS
public void setIP(string IPAddress, string SubnetMask, string Gateway, string DNS, string ALTDNS)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterCon
figuration");
ManagementObjectCollection objMOC = objMC.GetInstances();

foreach (ManagementObject objMO in objMOC)
{
ManagementBaseObject objNewIP = null;
ManagementBaseObject objSetIP = null;
ManagementBaseObject objNewGate = null;
ManagementBaseObject objNewDNS = null;
ManagementBaseObject objSetDNS = null;

if (!(bool)objMO["IPEnabled"])
continue;

try
{


objNewIP = objMO.GetMethodParameters("EnableStatic");
objNewGate = objMO.GetMethodParameters("SetGateways");
objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder");

//Set DefaultGateway
objNewGate["DefaultIPGateway"] = new string[] { Gateway };
objNewGate["GatewayCostMetric"] = new int[] { 1 };

//Set IPAddress and Subnet Mask
objNewIP["IPAddress"] = new string[] { IPAddress };
objNewIP["SubnetMask"] = new string[] { SubnetMask };

objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);

objNewDNS["DNSServerSearchOrder"] = new string[] { DNS, ALTDNS };
objSetDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS, null);

Console.WriteLine("Updated IPAddress, SubnetMask and Default Gateway!");
}
catch (Exception ex)
{
MessageBox.Show("Unable to Set IP : " + ex.Message);
}
finally
{
objNewIP = null;
objSetIP = null;
objNewGate = null;
objNewDNS = null;
objSetDNS = null;
}
}
}

Die Methode funktioniert zunächst 1A. Ich kann damit IP und Gateway statisch setzen. Das Problem ist, dass DHCP trotzdem noch an bleibt. Diese Änderung der Adressen ist quasi temporär. Wenn ich z.B. testhalber das Netzwerkkabel entferne und wieder rein stecke, sehe ich auf ein Mal mit ipconfig 2 Gateways. Das statisch von mir gesezte und das von DHCP bezogene.

Übersehe ich irgendwas? Ist "EnableStatic" doch keine Einstellung für statische IP-Settings?

R
228 Beiträge seit 2013
vor 9 Jahren

Schau mal hier -->Why does applying a static IP address via WMI work just once?

Bei warum und wieso kann ich dir leider nicht weiterhelfen, aber vielleicht kann es ja jemand anderes

J
Jazziroquai Themenstarter:in
5 Beiträge seit 2010
vor 9 Jahren

Danke sehr. An diesen Ansatz habe ich noch gar nicht gedacht. Ist eine denkbare Möglichkeit über WMI oder Win32 in der Registry des Clients DHCP auf 0 zu setzen.

Auch wenn es funktionieren sollte, ist das etwas unelegant. Gibt es da nichts besseres? Nicht als Fehlersuche in dem Code, den ich gepostet habe, sondern ganz allgemein. Gibt es evtl eine schöne Methode um DHCP an einem remote Windows 7 auszuschalten?

J
Jazziroquai Themenstarter:in
5 Beiträge seit 2010
vor 9 Jahren

Hallo nochmal,
hatte heute wieder Zeit an dem Projekt weiter zu basteln. Zunächst einmal: die Problemstellung des ersten Posts ist gelöst. Ich habe versucht mit der geposteten Funktion beim Auftreten des Fehlers nur das Gateway auf statisch zu ändern. Das funktioniert nicht. Dann bleibt DHCP an und ein neues Gateway wird vom Router bezogen. Mit EnableStatic muss auch immer die IP-Adresse geändert werden, wenn DHCP ausgeschaltet werden soll, auch wenn man das eigentlich gar nicht will.

Ich erhalte allerdings einen Folgefehler und habe keine Ahnung woran es liegt. Wenn ich mit dem oben geposteten Code die IPAdresse am Client ändere, passiert folgendes:
Die IP-Adresse und Subnetmaske werden geändert so wie es soll.
Gateway und DNS werden nicht gesetzt.
Die GUI-Blockiert für etwa 10 Sekunden.
Der Compiler wirf anschließend folgende Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Runtime.InteropServices.COMException" ist in System.Management.dll aufgetreten.
Zusätzliche Informationen: Der Remoteprozeduraufruf ist fehlgeschlagen. (Ausnahme von HRESULT: 0x800706BE)

Hat eventuell jemand eine Vermutung, wo der Fehler zu suchen ist?