Administrar unidades organizativas del dominio desde la línea de comandos de Windows Server 2016
Como ocurre con el resto de objetos del dominio, también es posible administrar las unidades organizativas desde la línea de comandos de Windows. En particular, usando la interfaz de comandos avanzada PowerShell.
Aunque hoy nos centremos en el uso de cmdlets sobre Windows Server 2016 sin interfaz gráfica, todo lo que expliquemos será válido en un sistema con escritorio. En este caso, puedes abrir fácilmente la ventana de terminal usando la combinación de teclas Windows + R y, escribiendo el siguiente comando en la ventana que aparece:
cmd
Como recordarás, para ejecutar PowerShell, sólo tenemos que escribir su nombre en la consola.
A partir de aquí, comenzaremos a aplicar las diferentes ordenes…
Crear una unidad organizativa
Para crear una unidad organizativa, utilizaremos el cmdlet New-ADOrganizationalUnit.
A pesar de que éste cmdlet reconoce un número considerable de argumentos, podemos crear una nueva unidad organizativa con una sintaxis tan sencilla como esta:
New-ADOrganizationalUnit -Name "Usuarios y grupos propios"
Como puedes imaginar, el argumento -Name indica el nombre del objeto dentro del directorio activo.
Comprobar la información relacionada con una Unidad organizativa
Una vez creada la unidad organizativa, podemos obtener todos sus detalles. De este modo comprobaremos, por ejemplo, los valores que se le han asignado de forma predeterminada.
Para lograrlo basta con utilizar el siguiente cmdlet:
Get-ADOrganizationalUnit "OU=Usuarios y grupos propios,DC=somebooks,DC=local"
Para obtener información de varias unidades organizativas al mismo tiempo, podemos sustituir, en la orden anterior, el nombre concreto por un filtro.
De este modo, obtendremos todas aquellas unidades organizativas cuyo nombre siga el patrón que indiquemos.
Consultar las unidades organizativas cuyo nombre atiende a un patrón.
Get-ADOrganizationalUnit -Filter 'Name -like "*"'
En el ejemplo, hemos sido muy genéricos, porque indicamos que puedan tener cualquier nombre.
Sin embargo, si el objetivo es mostrar todas las unidades organizativas, también podemos recurrir al cmdlet Get-ADObject, que está destinado a mostrar objetos del directorio activo. En este caso, deberemos indicar que la clase de objeto a mostrar (ObjectClass) es el que coincida con una unidad organizativa (organizationalunit).
Get-ADObject -Filter { ObjectClass -eq 'organizationalunit' }
Como puedes ver en la siguiente imagen, una ventaja de este método es que ofrece una salida mucho más compacta y fácil de leer.
Mover objetos dentro de una Unidad organizativa
Como ya hemos dicho en otras ocasiones, el objetivo de las unidades organizativas consiste en actuar como contenedores que nos permitan representar la organización lógica de nuestra red. Por lo tanto, una de las primeras tareas que afrontaremos, después de crearlas, será asignarle objetos (cuentas de usuario, de equipo, grupos u otras unidades organizativas).
Cuando necesitamos realizar esta tarea de forma individual, recurriremos al cmdlet Move-ADObject, con una sintaxis como esta:
Move-ADObject "CN=Arnold,CN=Users,DC=somebooks,DC=local" -TargetPath "OU=Usuarios y grupos propios,DC=somebooks,DC=local"
Como ves, después del cmdlet, hemos incluido la jerarquía que identifica al objeto que estamos desplazando. En este caso, se trata de una cuenta de usuario, pero podría ser un objeto de cualquiera de los tipos mencionados arriba. El argumento TargetPath nos permite indicar el lugar donde vamos a mover el objeto (en este caso, la unidad organizativa que hemos creado en al principio del artículo.
Cuando necesitamos trasladar más de un objeto al mismo tiempo, podemos obtener el grupo que nos interesa aplicando un filtro y, el resultado de la consulta dirigirlo al cmdlet Move-ADObject.
Para obtener los objetos, deberemos utilizar los cmdlets apropiados según su tipo. Es decir, Get-ADUser, Get-ADComputer, Get-ADGroup o Get-ADOrganizationalUnit.
En nuestro caso,como pretendemos mover cuentas de usuario, escribiremos lo siguiente:
Get-AdUser -Filter 'name -Like "B*" ' | Move-ADObject -TargetPath "OU=Usuarios y grupos propios,DC=somebooks,DC=local"
Como vimos antes, el argumento Filter nos permite seleccionar los objetos que sigan un patrón. En este caso, aquellos cuyo nombre comience por la letra B.
Los objetos que cumplan la condición se enviarán al cmdlet Move-ADObject, que sólo necesitará el destino de dichos objetos. Como antes, este aspecto lo incluímos tras el argumento TargetPath.
Comprobar los objetos que forman parte de una unidad organizativa
Una forma sencilla de comprobar si la orden anterior ha funcionado correctamente, consiste en obtener todos los objetos que forman parte de la unidad organizativa que hemos usado como destino.
Para lograrlo, podemos volver a utilizar Get-ADUser, pero ahora obteniendo los elementos que formen parte de la unidad organizativa. La sintaxis sería como esta:
Get-ADUser -Filter * -SearchBase "OU=Usuarios y grupos propios,DC=somebooks,DC=local"
Eliminar una unidad organizativa
Una última operación que debemos aprender a aplicar con las unidades organizativas es a eliminarlas.
En este sentido, debemos tener en cuenta que, para eliminar una unidad organizativa que no se encuentre vacía, deberemos eliminar también los elementos que contenga.
El cmdlet que nos permite realizar esta operación es o Remove-ADOrganizationalUnit. Sin embargo, si no hemos indicado lo contrario al crearla, la unidad organizativa estará protegida contra la eliminación accidental. Esto significa que al tratar de eliminarla recibiremos un error como el de la siguiente imagen:
En estos casos, lo primero será eliminar la protección contra la eliminación accidental de la unidad organizativa usando el cmdlet Set-ADOrganizationalUnit. La orden completa tendrá un aspecto parecido a este:
Set-ADOrganizationalUnit -Identity "OU=Usuarios y grupos propios,DC=somebooks,DC=local" -ProtectedFromAccidentalDeletion $false
A continuación sí que será posible aplicar el cmdlet Remove-ADOrganizationalUnit. Además, aplicaremos el argumento Recursive para que se eliminen automáticamente las unidades organizativas que pudiese haber dentro de la actual.
Remove-ADOrganizationalUnit -Identity "OU=Usuarios y grupos propios,DC=somebooks,DC=local" -Recursive
Y esto es todo por hoy. Espero que te resulte útil.