0

ネットワーク アダプターの構成をローカルで変更しようとしています。管理者以外のユーザーを使用する必要がありますが、メソッドを呼び出そうとすると、「Access Denied」を表す戻り値「91」が返されます。「EnableStatic」メソッドの権限を設定することはできましたが、「SetDNSServerSearchOrder」はまったく機能しません。常に「アクセスが拒否されました」を返します。(Win32_NetworkAdapter で) ネットワーク アダプターを無効にすることさえできません。すべてが管理ユーザーでうまく機能します。私は「EnableStatic」で同じ問題を抱えていたので、他の方法でこれを機能させる方法があるに違いないと確信しています。すべての名前空間に対して wmimgmt.msc でセキュリティ オプションを設定し、dcomcnfg で制限を設定し、レジストリで tcpip のアクセス許可を付与しました。分散comユーザー、パフォーマンスグループ、ネットワーク構成オペレーターにユーザーを追加しましたが、これを機能させる方法はありません。ツールの実行中に dns ip がないことに気付きました。そのため、メソッドは「アクセスが拒否されました」を返していますが、何かが変わります。何か案は?Microsoft でさえ、まだ 3 週間もの間、私を助けることができませんでした。管理者としてログインしている場合、ツールは問題なく実行されています。これが私の C# コードです: 管理者としてログインしている場合、ツールは問題なく実行されています。これが私の C# コードです: 管理者としてログインしている場合、ツールは問題なく実行されています。これが私の C# コードです:

    private static ManagementScope CreateScope(string strScope)
    {
        ManagementScope scope = new ManagementScope(strScope);
        scope.Options.Impersonation = ImpersonationLevel.Impersonate;
        scope.Options.Authentication = AuthenticationLevel.Packet;
        return scope;
    }

    public static void SetIP(String strScope, String strQuery, string IPAddress, string SubnetMask, string Gateway, string DNSServer1, string DNSServer2)
    {
        ManagementScope scope = CreateScope(strScope);
        SelectQuery query = new SelectQuery(strQuery);
        Collection<object> objCol = new Collection<object>();
        scope.Connect();
        ManagementObjectCollection mobjCol = null;
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
        {
            mobjCol = searcher.Get();
        }
        foreach (ManagementObject objMO in mobjCol)
        {
            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[] { IPAddress };
                objNewIP["SubnetMask"] = new string[] { SubnetMask };

                //Set DNS servers
                objNewDNS["DNSServerSearchOrder"] = new string[] { DNSServer1, DNSServer2 };

                //Invoke all changes
                objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
                MessageBox.Show("EnableStatic: " + objSetIP["ReturnValue"].ToString());
                objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);
                MessageBox.Show("SetGateways: " + objSetIP["ReturnValue"].ToString());
                objSetIP = objMO.InvokeMethod("SetDNSServerSearchOrder", objNewDNS,null);                                                               
                MessageBox.Show("SetDNSServerSearchOrder: " + objSetIP["ReturnValue"].ToString());


            }
            catch (ManagementException ex)
            {
                MessageBox.Show("Unable to Set IP : " + ex.Message);
            }
        }
    }
4

1 に答える 1

0

管理者以外のユーザーには、WMIクエリを実行するためのアクセス許可が必要です。WMIコントロールを使用して関連するアクセス許可を設定できます[ServerManager/構成またはコンピューターの管理/サービスとアプリケーション]参照:http ://technet.microsoft.com/en-us/library/cc775497(v = ws.10).aspx

CIMV2名前空間の管理者以外のユーザーに、実行メソッド、アカウントとプロバイダーの書き込み権限を有効にしてみてください。

于 2012-08-01T00:54:50.277 に答える