2010-10-12 13 views
7

Estoy construyendo una aplicación web C# para administrar nuestros servidores DNS y estoy usando el espacio de nombres WMI para todo. Lo único con lo que estoy teniendo problemas es eliminar dominios DNS. Aquí está mi código:¿Cómo elimino un dominio DNS mediante programación?

internal static bool DeleteDomainFromDns(string DnsServerName, string ContainerName, string Name) 
    { 
     try 
     { 
      string Query = "SELECT * FROM MicrosoftDNS_Domain WHERE DnsServerName = '" + DnsServerName + "' AND ContainerName = '" + ContainerName + "' AND Name = '" + Name + "'"; 
      ObjectQuery qry = new ObjectQuery(Query); 
      DnsProvider dns = new DnsProvider(); 
      ManagementObjectSearcher s = new ManagementObjectSearcher(dns.Session, qry); 
      ManagementObjectCollection col = s.Get(); 
      dns.Dispose(); 

      foreach (ManagementObject obj in col) 
      { 
       obj.Delete(); //Exception occurs here 
      } 
      return true; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 

El error que recibo es: ManagementException fue capturado como "Fallo genérico". He leído en línea dónde las personas están eliminando dominios mediante el uso del espacio de nombres de la zona, pero eso solo funciona si el dominio que desea eliminar es una zona en sí misma. Necesito eliminar dominios que no son zonas. ¿Alguien puede ayudar?

+0

¿Está seguro de que puede deshacerse de esa instancia 'DnsProvider' antes de iterar? – leppie

+0

Sí, por dos razones. No lo uso más allá de ese punto y porque así es como lo hago para todos mis métodos de eliminación de DNS. – mcass20

Respuesta

2

No he encontrado una manera de eliminar un dominio usando WMI y también me registré en un snaps de Powershell llamado DNSShell pero no parece que haya un comando para eliminar el dominio.

+0

@RJ: Por mucho que no quiera aceptar su respuesta, parece que se ha acercado más a la respuesta correcta. – mcass20

1

Puede probar con el script DnsResource.vbs desde Delete a Resource Record. Solo utiliza el proveedor de DNS WMI. Entonces, si funciona para su marsopa, puede hacer lo mismo en su programa C#.

También puede considerar utilizar DnsModifyRecordsInSet. En Windos SDK (C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ netds \ dns \ modifyrecords) puede encontrar un ejemplo en C++ que usa DnsModifyRecordsInSet. Demuestra cómo agregar un registro en el DNS. Si usa el segundo parámetro pDeleteRecords en lugar del primer pAddRecords, podrá eliminar cualquier registro en el DNS.

+0

Gracias por intentarlo, pero no tengo problemas para eliminar los registros de recursos. Tengo un problema al eliminar dominios. – mcass20

+0

@ mcass20: el tipo de recurso puede ser cualquiera de la estructura 'DNS_RECORD' (ver http://msdn.microsoft.com/en-us/library/ms682082(VS.85).aspx) inclusive el registro 'A' Registro NS y registro 'CNAME' o, en ocasiones, registro 'MX' y 'SOA' recodificado, que se utilizan principalmente para definir un subdominio (ver http://manual.intl.indoglobal.com/ch03s05.html). Simplemente mire como servidor DNS cómo se define el subdominio en su entorno y elimine los registros correspondientes. – Oleg

+0

Gracias de nuevo por su conocimiento, sin embargo, eliminar los registros en el dominio no elimina el contenedor del dominio en sí, que es mi objetivo aquí. – mcass20

Cuestiones relacionadas