0

WMIを使用してローカルマシンとリモートマシンのIPアドレスを変更するアプリケーションを作成しています。このコードは、リモートマシンのゲートウェイとDNSを正常に変更し、同じコード(異なるクラスで、管理スコープの部分を除く)は、すべてのデータ(2つのIP、ゲートウェイ、DNS)をローカルで変更します。問題は、リモートIPアドレスが変更されないことです。私はどこでもこの答えを探してきたので、誰かがアドバイスできますか?

ファイアウォールがなく、リモートマシンに.net4がインストールされているWindows7とxpでテストしました

class remoteIPChange
{
    public string setTillIP(string IPAddress1, string IPAddress2, string SubnetMask, string Gateway)
    {
        ConnectionOptions connection = new ConnectionOptions();
        connection.Username = "username";
        connection.Password = "password";
        connection.Authority = "ntlmdomain:DOMAIN";

        ManagementScope scope = new ManagementScope(
        "\\\\"+IPAddress1+"\\root\\CIMV2", connection);
        scope.Connect();

        ObjectGetOptions o = new ObjectGetOptions();

        ManagementPath p = new ManagementPath("Win32_NetworkAdapterConfiguration");

        ManagementClass objMC = new ManagementClass(scope,p,o);

        ManagementObjectCollection objMOC = objMC.GetInstances();

        foreach (ManagementObject objMO in objMOC)
        {
            if (!(bool)objMO["IPEnabled"])
            continue;

            try
            {
                ManagementBaseObject objNewIP = null;
                ManagementBaseObject objSetIP = null;
                ManagementBaseObject objNewGate = null;
                ManagementBaseObject objNewDNS = null;

                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[] { IPAddress1, IPAddress2 };
                objNewIP["SubnetMask"] = new string[] { SubnetMask, SubnetMask };

                //Set DNS servers
                objNewDNS["DNSServerSearchOrder"] = new string[] {Gateway };

                //Invoke all changes
                objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
                objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);
                objSetIP = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS, null);

                return ("Updated IPAddress to " + IPAddress + ", \nSubnetMask to " + SubnetMask + " \nand Default Gateway to " + Gateway + "!");
            }
            catch (Exception ex)
            {
                return ("Unable to Set IP : " + ex.Message);
            }
        }
        return "code has not run";
    }
}
4

1 に答える 1

0

EnableStatic の invokemethod からの ReturnValue を確認します。サブネットに null を渡すことが問題であると確信しています。null の代わりに、IP アドレスに一致するサブネットの有効な配列を指定してください。

于 2013-08-29T20:15:55.243 に答える