none
Script para quitar el usuario del grupo Administradores locales RRS feed

  • Pregunta

  • Hola buenas tardes, he leido varios foros y me he encontrado este código de (Karla Alejandra), para eliminar al usuario del grupo administradores locales

    DirectoryEntry localMachine = new DirectoryEntry
        ("WinNT://" + Environment.MachineName + ",Computer");
    DirectoryEntry admGroup = localMachine.Children.Find
        ("administrators", "group");
    object members = admGroup.Invoke("members", null);

    foreach (object groupMember in (IEnumerable)members)
    {
        DirectoryEntry member = new DirectoryEntry(groupMember);
        Console.WriteLine(member.Name);
    }

     El archivo lo tendría que guardar como *.vbs y luego ponerlo en la GPO....¿es así?

    O si alguien conoce algún otro código , les estaría agradecido.

     

    Gracias.

     

    Un saludo

    lunes, 14 de junio de 2010 14:18

Respuestas

  • Eso no es VbScript ni PowerShell, creo que se trata de C#, lo cual quiere decir que no se trata de un script, si no de un código que hay que compilar para crear un ejecutable.

    Sin saber poco ni mucho de C#, dado su parecido con PowerShell, yo diría que ese código lo único que hace es enumerar los miembros que pertenecen al grupo local Administrators, no saca ningún usuario de ese grupo.

    Para quitar un usuario de un grupo local (en el ejemplo al usuario mortadelo del grupo administrators) con VbScript:

    str_Equipo= "mortadelo-pc"
    Set obj_Grupo = GetObject("WinNT://" & str_Equipo & "/Adminstrators,group")
    Set obj_Usuario = GetObject("WinNT://" & str_Equipo & "/mortadelo,user")
     
    obj_Grupo.Remove(obj_Usuario.ADsPath)

    El script lo guardas como .vbs. Como mencionas una GPO, entiendo que lo que buscas es que sea el usuario que se está logando el que se quite del grupo. Esto tiene dos cosas a tener en cuenta:

    • Hay que averiguar el usuario que está logandose.
    • Hay que comprobar que pertenezca al grupo antes de intentar quitarlo, para evitar que se produzca un error.
    Option Explicit
    
    Dim obj_NW
    Dim obj_Grupo
    Dim obj_Usuario
    Dim str_Equipo
    Dim str_Usuario
    Dim str_ADsPathUsuario
    Dim bol_EsMiembro
    
    'Creamos un objeto wshNetwork
    Set obj_NW = CreateObject("WScript.Network")
    
    'Obtenemos el nombre NetBios del equipo
    str_Equipo = obj_NW.ComputerName
    
    'Obtenemos el sAMAccountName del usuario
    str_Usuario = obj_NW.UserDomain & "/" & obj_NW.UserName
    
    'Obtenemos el objeto usuario
    Set obj_Usuario = GetObject("WinNT://" & str_Usuario & ",user")
    
    'Obtenemos la ruta ADSI del usuario
    str_ADsPathUsuario = obj_Usuario.ADsPath
    
    'Iniciamos la variable de control de membresía a False
    bol_EsMiembro = False
    
    'Obtenemos el objeto IAdsGroup de grupo de administradores locales
    Set obj_Grupo = GetObject("WinNT://" & str_Equipo & _
          "/Administradores,group")
    
    'Recorremos los miembros del grupo
    For Each obj_Usuario In obj_Grupo.Members
    
     'Si coinciden las rutas ADSI del usuario logado y del miembro
     'actual (usamos LCase para no tener problemas de mayúsculas/
     'minúsculas)...
     If LCase(obj_Usuario.ADsPath) = LCase(str_ADsPathUsuario) Then
     
     'Almacenamos que es miembro
     bol_EsMiembro = True
     
     'Salimos del bucle For, pues no tiene sentido que sigamos
     'recorriendolo
     Exit For
     
     End If
     
    Next
    
    'Si el usuario es miembro
    If bol_EsMiembro Then
    
     'Obtenemos el objeto iADsUser
     Set obj_Usuario = GetObject(str_ADsPathUsuario)
     
     'Quitamos al usuario del grupo
     obj_Grupo.Remove(obj_Usuario.ADsPath)
     
    End If

    De todas maneras, para lo que quieres hacer, lo mismo no es necesario que utilices un script, a lo mejor te puede valer usar una política de grupos restringidos:

    Description of Group Policy Restricted Groups
    http://support.microsoft.com/kb/279301/en-us

    Restricted Groups
    http://technet.microsoft.com/en-us/library/cc785631%28WS.10%29.aspx


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    • Marcado como respuesta nashski martes, 15 de junio de 2010 10:01
    lunes, 14 de junio de 2010 20:16
    Moderador

Todas las respuestas

  • Eso no es VbScript ni PowerShell, creo que se trata de C#, lo cual quiere decir que no se trata de un script, si no de un código que hay que compilar para crear un ejecutable.

    Sin saber poco ni mucho de C#, dado su parecido con PowerShell, yo diría que ese código lo único que hace es enumerar los miembros que pertenecen al grupo local Administrators, no saca ningún usuario de ese grupo.

    Para quitar un usuario de un grupo local (en el ejemplo al usuario mortadelo del grupo administrators) con VbScript:

    str_Equipo= "mortadelo-pc"
    Set obj_Grupo = GetObject("WinNT://" & str_Equipo & "/Adminstrators,group")
    Set obj_Usuario = GetObject("WinNT://" & str_Equipo & "/mortadelo,user")
     
    obj_Grupo.Remove(obj_Usuario.ADsPath)

    El script lo guardas como .vbs. Como mencionas una GPO, entiendo que lo que buscas es que sea el usuario que se está logando el que se quite del grupo. Esto tiene dos cosas a tener en cuenta:

    • Hay que averiguar el usuario que está logandose.
    • Hay que comprobar que pertenezca al grupo antes de intentar quitarlo, para evitar que se produzca un error.
    Option Explicit
    
    Dim obj_NW
    Dim obj_Grupo
    Dim obj_Usuario
    Dim str_Equipo
    Dim str_Usuario
    Dim str_ADsPathUsuario
    Dim bol_EsMiembro
    
    'Creamos un objeto wshNetwork
    Set obj_NW = CreateObject("WScript.Network")
    
    'Obtenemos el nombre NetBios del equipo
    str_Equipo = obj_NW.ComputerName
    
    'Obtenemos el sAMAccountName del usuario
    str_Usuario = obj_NW.UserDomain & "/" & obj_NW.UserName
    
    'Obtenemos el objeto usuario
    Set obj_Usuario = GetObject("WinNT://" & str_Usuario & ",user")
    
    'Obtenemos la ruta ADSI del usuario
    str_ADsPathUsuario = obj_Usuario.ADsPath
    
    'Iniciamos la variable de control de membresía a False
    bol_EsMiembro = False
    
    'Obtenemos el objeto IAdsGroup de grupo de administradores locales
    Set obj_Grupo = GetObject("WinNT://" & str_Equipo & _
          "/Administradores,group")
    
    'Recorremos los miembros del grupo
    For Each obj_Usuario In obj_Grupo.Members
    
     'Si coinciden las rutas ADSI del usuario logado y del miembro
     'actual (usamos LCase para no tener problemas de mayúsculas/
     'minúsculas)...
     If LCase(obj_Usuario.ADsPath) = LCase(str_ADsPathUsuario) Then
     
     'Almacenamos que es miembro
     bol_EsMiembro = True
     
     'Salimos del bucle For, pues no tiene sentido que sigamos
     'recorriendolo
     Exit For
     
     End If
     
    Next
    
    'Si el usuario es miembro
    If bol_EsMiembro Then
    
     'Obtenemos el objeto iADsUser
     Set obj_Usuario = GetObject(str_ADsPathUsuario)
     
     'Quitamos al usuario del grupo
     obj_Grupo.Remove(obj_Usuario.ADsPath)
     
    End If

    De todas maneras, para lo que quieres hacer, lo mismo no es necesario que utilices un script, a lo mejor te puede valer usar una política de grupos restringidos:

    Description of Group Policy Restricted Groups
    http://support.microsoft.com/kb/279301/en-us

    Restricted Groups
    http://technet.microsoft.com/en-us/library/cc785631%28WS.10%29.aspx


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    • Marcado como respuesta nashski martes, 15 de junio de 2010 10:01
    lunes, 14 de junio de 2010 20:16
    Moderador
  •  

    " entiendo que lo que buscas es que sea el usuario que se está logando el que se quite del grupo. "


    Es eso exactamente. Muchas gracias por tan extensa respuesta. Miraré el tema que mencionas sobre la política de grupos restriguidos y probaré el script, que has tenido la gentileza de ponerme....

    Muchas gracias.

     

    martes, 15 de junio de 2010 10:01
  • Hola de nuevo, probé el srcipt que pusiste,

    Lo copie en el notepad y lo guardé con extension *.vbs, luego lo añadía a la GPO de una unidad organizativa, en la parte de:

    Configuracion de Windows - secuencias de comandos - Inicio de Sesión.

    pero no hace mucho caso, Cuando enciendo el equipo y entro con un usuario que es administrador Local,.....no lo quita del grupo sino que sigue siendo administrador

    ¿he realizado algo mal?. :_-(

     

    Gracias.

    jueves, 17 de junio de 2010 10:05
  • Si el script ha funcionado, el usuario dejará de ser miembro del grupo administradores locales de la máquina, si bien no será efectivo hasta el siguiente inicio de sesión. Casi sería mejor que lo pusieras como script de cierre de sesión. No obstante, prueba a ejecutar el script de forma interactiva con un usuario, para comprobar que funciona; si funciona, revisa con GPRESULT si se está aplicando la politica; si no funciona, a ver qué error da.
    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    jueves, 17 de junio de 2010 13:47
    Moderador
  • Gracias, de nuevo , ahora sí funciona.

    Pero viendo el resultado me suge una duda, podría ser que envez de eliminarlo, cambiase las propiedades a "usuario avanzado"

    Porque al eliminar al usuario desaparece.

     

     

    Gracias.

    Un saludo.

     

    viernes, 18 de junio de 2010 8:51
  • perdon que llegye tarde la respuesta pero yo siempre he dicho y pienso que lo cencillo es lo mejor

    lo unico que tienes que hacer es cambiar al usuario con "net localgroup el grupo donde lo quieres poner usuari /add"

    y elimnarlo del grupo de administradores "net localgroup administradores usuario /delete

    martes, 11 de noviembre de 2014 6:54