Administrar usuarios del dominio desde la línea de comandos de Windows Server 2016 (Parte III)

Con el artículo de hoy terminamos esta serie dedicada a la administración de usuarios del dominio desde la línea de comandos de Windows Server 2016 (si aún no has leído la primera parte o la segunda, te recomiendo que comiences por ellas).

El contenido de hoy estará centrado en los siguientes objetivos:

  • Convertir a un usuario en miembro de un grupo

  • Comprobar de qué grupos es miembro un usuario

  • Establecer horas de inicio de sesión para una cuenta de usuario

Como ya explicábamos en los artículos anteriores, aquí trabajaremos en Windows Server 2016 sin interfaz gráfica. Sin embargo, lo que expliquemos será completamente válido en un sistema con escritorio.

Si necesitas abrir la ventana de terminal puedes utilizar la combinación de teclas Windows + R y, escribir el siguiente comando en la ventana que aparece:

cmd

En esta tercera parte también realizaremos todo el trabajo mediante cmdlets de PowerShell. Por lo tanto, lo primero que debemos hacer será ejecutar el propio PowerShell.

Escribimos el nombre de la interfaz de consola y pulsamos la tecla Intro.

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-i

A partir de aquí, comenzaremos a aplicar las diferentes ordenes…

Convertir a un usuario en miembro de un grupo

Durante la administración de un dominio, es muy frecuente que convirtamos las cuentas de usuario en  miembros de uno o varios grupos. De este modo, los administraremos o compartiremos recursos de manera conjunta con todos los miembros del grupo.

En cualquier caso, el proceso de convertir una cuenta de usuario en miembro de un grupo es tan sencillo usar el cmdlet Add-ADGroupMember con la siguiente sitaxis:

Add-ADGroupMember "Operadores de copia de seguridad" Bernard,Arnold

En este ejemplo concreto, unimos los dos usuarios con los que hemos estrado trabajando hasta ahora, al grupo Operadores de copia de seguridad. Observa que hemos puesto el nombre del grupo entre comillas, pero esto sólo es necesario porque contiene espacios en blanco.

Escribimos la orden anterior y pulsamos la tecla Intro.

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-001

Si necesitas más información sobre el cmdlet Add-ADGroupMember, te recomiendo que consultes la página https://technet.microsoft.com/en-us/library/ee617210.aspx.

Comprobar de qué grupos es miembro un usuario

Si quieres comprobar si un usuario es miembro de un grupo, puedes usar el cmdlet Get-ADUser, que ya conocemos de otros momentos, pero ahora consultaremos la propiedad MemberOf.

En definitiva, la sintaxis quedará así:

Get-ADUser Bernard -Properties MemberOf

El resultado será similar al que se muestra en la siguiente imagen.

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-002

Establecer horas de inicio de sesión para una cuenta de usuario

Como ya decíamos hace unos días, una de las precauciones más básicas que podemos considerar respecto de la seguridad de una red es impedir que los usuarios inicien sesión en el sistema fuera del horario que hayamos establecido para ello (por ejemplo, fuera de su jornada laboral).

Para entender el modo de establecer horas de inicio de sesión en modo texto, creo que puede resultar interesante echar un vistazo al modo en que lo representa Windows Server 2016 en modo gráfico:

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-003

Si te fijas, cada día está representado por 24 cuadros, uno por cada hora. Además, cada cuadro sólo puede estar representa en color blanco o en color azul.

Internamente, Windows representa cada uno de estos cuadros con un bit: Si a una hora determinada se puede iniciar sesión (cuadro azul), su bit correspondiente se encuentra a 1. De lo contrario, dicho bit esta representado por un 0 (cuadro blanco).

Como es lógico, los bits no se manejan de forma individual, sino que forman parte de un byte. Así, con 3 bytes (ya sabes que cada byte contiene 8 bits) podemos representar las 24 horas del día (3 x 8 = 24).

Por lo tanto, si imagináramos el lunes de la imagen anterior representado como una secuencia de bits, podría ser algo así:

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-004

Lamentablemente, no es exactamente así. Y no lo es por un motivo muy sencillo: en un byte, el bit de menor peso no se encuentra a la izquierda, sino a la derecha. Esto significa que, el bit que representa las 0 horas no es el primero por la izquierda del primer byte, sino el primero por la derecha. En otras palabras: tenemos que reorganizar la representación anterior según la posición real de cada bit. Quedaría así:

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-005

Si ahora calculamos el valor ASCII de cada byte, nos quedaría esto:

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-006

Una última cosa que debemos tener en cuenta: en el calendario inglés, el primer día de la semana es el domingo.

Pues bien, una vez que tenemos todo esto claro, para representar las horas de inicio de sesión en Windows Server 2016 debemos comenzar por definir un array de caracteres. En él, cada grupo de tres valores representará a un solo día (recuerda que el primero será el domingo).

Por lo tanto, para el horario que vimos al principio, definiremos el siguiente array:

[byte[]]$horario=@(0,0,0,224,231,1,224,231,1,224,231,1,224,231,1,224,231,1,0,0,0)

Si no has trabajado antes con PowerShell, basta con que copies la sintaxis anterior.

Escribimos, o copiamos, la línea anterior y pulsamos la tecla Intro.

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-007

Como es lógico, los valores del array se repiten, de tres en tres, porque de lunes a viernes hemos establecido el mismo horario.

A continuación, sólo nos queda establecer el nuevo valor en la propiedad logonhours de la cuenta de usuario. Algo que podemos conseguir con la siguiente orden:

Get-ADUser Bernard | Set-ADUser -replace @{logonhours =  $horario}

En definitiva, lo que estamos haciendo es obtener un objeto que representa al usuario y enviárselo la cmdlet Set-ADUser mediante el carácter de tubería (|). El argumento -replace sustituye el valor actual  de logonhours por el array que hemos creado más arriba.

De nuevo, escribimos la orden y pulsamos la tecla Intro.

Administrar-usuarios-del-dominio-desde-la-linea-de-comandos-de-Windows-Server-2016-parte-iii-008

Y esto es todo por hoy. Espero que te resulte útil.