Importar usuarios desde Active Directory

Hoy intentaremos descargar una lista de todos los usuarios en un archivo separado de Active Directory. Nuestro principal asistente en este asunto será PowerShell. El caso es que Microsoft planeó inicialmente la consola de comandos PowerShell como herramienta principal para administrar los componentes del servidor de Windows. Y hoy, cuando ya tenemos la versión 2.0, en general, esto es así.

Incluso en el pasado reciente, para poder interactuar de alguna manera con AD, los administradores necesitaban tener a su disposición la utilidad dsquery o varios tipos de scripts o utilidades. Hoy, a partir de Windows Server 2008 R2, podemos trabajar con AD a través de PowerShell. Con la llegada de PowerShell 2.0, se utiliza un módulo especial para interactuar con Active Directory Módulo de Active Directory para Windows PowerShell, que contiene la lista necesaria de cmdlets. Para nuestras tareas usaremos el comando Obtener-ADUser.

Entonces, dependiendo del sistema operativo bajo el que ejecutaremos la consola PowerShell, necesitaremos realizar "pasos preparatorios".

1) Si estamos trabajando bajo Windows Server hasta la versión 2012, entonces necesitamos ejecutar el comando:

  • Activedirectory del módulo de importación – comando para importar un módulo a AD

Para versiones de sistemas operativos a partir de 2012 y superiores, este módulo ya está habilitado de forma predeterminada.

2) Si trabajamos desde cualquier cliente Windows, entonces se debe instalar en él el paquete de administración remota RSAT, con el componente Módulo Active Directory para Windows PowerShell instalado.

Vale la pena señalar que se recomienda ejecutar el cmdlet Get-ADUser cuando la cantidad de datos que se cargan es de hasta 1000 usuarios.

Exportar usuarios de AD usando PowerShell a un archivo separado

Primero, llamemos a la ayuda para el comando Get-ADUser. Como resultado, recibirá todos los comandos necesarios para una mayor administración.

  • ayuda Get-ADUser – comando para pedir ayuda

Para obtener una lista de todos los usuarios con todas las propiedades en una ventana de PowerShell, debe ejecutar el siguiente comando:

  • Obtener-ADUser-filtro * – exportar una lista de usuarios de AD

Esta carga no es del todo informativa y no ajusta toda la información necesaria en la ventana. Por lo tanto, intentemos limitar la búsqueda y mostrar las propiedades de un usuario específico llamado usuario1:

  • Get-ADUser -identidad usuario1 -properties * – exportar propiedades de un usuario específico

Ahora intentemos exportar la lista de todos los usuarios con sus propiedades a un sitio externo. texto o csv archivo:

  • Get-ADUser -filter * -properties * | Exportar-csv -ruta c:\users.csv -codificación Unicode – exportar usuarios a un archivo separado

Me gustaría prestar especial atención a la clave. -codificación Unicode. Sirve para garantizar que el alfabeto cirílico ruso, después de la exportación desde AD, se pueda mostrar correctamente en el archivo cargado. Por ejemplo, a través de Microsoft Excel veremos signos de interrogación en lugar de letras rusas.

Al visualizar un archivo, los datos se exportan en una línea y, por lo tanto, no son legibles. Para cambiar esto necesitamos hacer lo siguiente:

Scripts para descargar todos los usuarios de MS Active Directory (ITGC)

Iván Piskunov

Uno de los procedimientos de auditoría estándar. ITGC para el catalogo Directorio activo es obtener una descarga de todos los usuarios del dominio. A partir de los datos obtenidos, se elaboran procedimientos de prueba, por ejemplo, estudiando la lista de administradores o identificando usuarios con una contraseña caducada. La forma más eficaz de crear dicha carga sería utilizar una interfaz estándar PowerShell , ejemplos de los cuales consideraremos en este artículo.

1. Carga rápida mediante un script de PowerShell

A continuación se muestra un script de PowerShell como una de las formas más sencillas y rápidas de obtener una lista de todos los usuarios del dominio AD en formato CSV, que se puede abrir fácilmente en Excel.

$objSearcher = Nuevo-Objeto System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru" $objSearcher.Filter = "(&(objectCategory=persona) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $usuarios = $objSearcher.FindAll() # Número de cuentas $usuarios.Count $usuarios | ForEach-Object ( $usuario = $_.Properties New-Object PsObject -Property @( Posición = $user.description Departamento = $user.department Inicio de sesión = $user.userprincipalname Teléfono = $user.telephonenumber Sala = $user.physicaldeliveryofficename Completo nombre = $usuario.cn ) ) | Exportar-Csv -NoClobber -Codificación utf8 -Ruta C: lista_dominio_usuarios.csv

Para que el script funcione en su sistema, debe corregirlo ligeramente, es decir, ingresar los parámetros necesarios, es decir como en este ejemplo estos son los parámetros Usuarios en el departamento Departamentos en el dominio Prueba.ru. Y también indique la ruta donde se guarda el archivo. lista_dominio_usuarios.csv

Después de la descarga, si lo abre inmediatamente. lista_dominio_usuarios.csv , parecerá ilegible; sin embargo, utilizando medios estándar podemos llevarlo fácilmente al formato que necesitemos. Abrir en Excel lista_dominio_usuarios.csv , seleccione la primera columna, luego vaya a la pestaña "Datos" y haga clic en "Texto por columnas". Seleccione "delimitado" y haga clic en "Siguiente". ¡Listo!

!Es necesario tener en cuenta que este script no mostrará más de 1000 usuarios. Es bastante adecuado para una pequeña empresa, pero para aquellos que tienen una gran cantidad de usuarios en su dominio, deberían recurrir a los métodos que se describen a continuación.

2. Cmdlet avanzado de PowerShell para obtener cargas de usuarios de Active Directory

La herramienta Active Directory Module para Windows PowerShell (introducida en Windows Server 2008 R2 y superior) le permite crear cmdlets que realizan diversas manipulaciones con objetos del directorio AD. El cmdlet se utiliza para obtener información sobre los usuarios y sus propiedades. Obtener-ADUser.

Para empezar abrir una ventana de Powershell con derechos de administrador e importe el módulo de Active Directory para realizar acciones adicionales:
Activedirectory del módulo de importación

A enumerar todas las cuentas de dominio Ejecutemos el comando:

Obtener-ADUser-filtro *

A mostrar información completa sobre todos los atributos disponibles usuario tuser, ejecuta el comando

Get-ADUser -identity tuser -properties *


Por ejemplo, estamos interesados ​​en información sobre fecha del cambio de contraseña y hora de caducidad . El resultado del comando se puede exportar a un archivo de texto:

Get-ADUser -filter * -properties ContraseñaExpired, ContraseñaLastSet, ContraseñaNeverExpires | ft Nombre, ContraseñaExpirada, ContraseñaÚltimaConfigurada, ContraseñaNuncaExpira > C:tempusers.txt

O de inmediato subir a CSV , que en el futuro será conveniente exportar a Excel (además, usando sort-object ordenaremos la tabla por la columna PasswordLastSet y también agregaremos una condición donde: el nombre de usuario debe contener la cadena "Dmitry")

Get-ADUser -filter * -properties ContraseñaExpired, ContraseñaLastSet, ContraseñaNeverExpires | donde ($_.nombre –como “*Dmitry*”) | objeto de clasificación ContraseñaLastSet | seleccionar nombre de objeto, ContraseñaExpirada, ContraseñaLastSet, ContraseñaNeverExpires | Exportar-csv -ruta c:tempuser-contraseña-expires-2015.csv

Seguimos familiarizándonos con cmdlets útiles de PowerShell para trabajar con Active Directory. En el último artículo hablamos de lo que le permite obtener cualquier información sobre las cuentas de usuario de AD. Hoy hablaremos del cmdlet. Conseguir-ADComputadora y su uso para obtener diversos datos sobre cuentas de computadora (servidores y estaciones de trabajo) en el dominio de Active Directory.

Pongámonos una tarea práctica: usando PowerShell, necesita obtener una lista de cuentas de computadora que no han estado registradas en el dominio durante más de 120 días (computadoras inactivas) y deshabilitarlas.

Antes de poder utilizar el cmdlet Get-ADComputer, debe habilitar el módulo ActivoDirectorioMóduloparaventanasPowerShell.

Activedirectory del módulo de importación

Consejo. En PowerShell 3.0 (introducido en Windows Server 2012) y versiones posteriores, este módulo está habilitado de forma predeterminada al instalar Herramientas de administración remota del servidor -> Herramientas de administración de funciones -> Herramientas AD DS y AD LDS -> Módulo Active Directory para el componente Windows PowerShell. Para usar el cmdlet Get-ADComputer en clientes Windows 10.8.1 y Windows 7, debe descargarlo e instalarlo para su versión de sistema operativo y habilitar el módulo AD-Powershell desde el panel de control o con el comando:
Habilitar-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Consideraciones de sintaxis del cmdlet Get-ADComputer

La ayuda sobre los parámetros del cmdlet Get-ADComputer se llama de forma estándar mediante Get-Help:

Para obtener información de AD usando AD para cmdlets del módulo Powershell, no es necesario tener derechos de administrador de dominio, basta con que la cuenta bajo la cual se ejecuta el cmdlet esté incluida en el grupo de usuarios del dominio (Usuarios autenticados/Usuarios de dominio).

Para obtener información sobre una computadora específica en un dominio, especifique su nombre con el parámetro - Identidad:

Obtener-ADComputer-Identidad SRV-DB01

Estamos interesados ​​en la hora en que la computadora se registró por última vez en el dominio AD, pero esta información no está en la salida del comando. Mostremos todas las propiedades de computadora disponibles en Active Directory:

Obtener-ADComputer -Identidad SRV-DB01 -Propiedades *

Como puede ver, la última vez que esta computadora inició sesión en la red se indica en el atributo LastLogonDate: 21.09.2015 0:20:17.

Eliminaremos toda la información innecesaria, dejando solo los valores de los campos. Nombre Y Última fecha de inicio de sesión.

Get-ADComputer -identity SRV-DB01 -Propiedades * | Nombre FT, Última fecha de inicio de sesión -Tamaño automático

A continuación, debe corregir el comando para que muestre información sobre la hora del último registro en la red para todas las computadoras del dominio. Para hacer esto, reemplace el parámetro. Identidad en Filtrar:

Get-ADComputer -Filter * -Properties * | Nombre FT, Última fecha de inicio de sesión -Tamaño automático

Para mostrar información sobre las computadoras en un contenedor de dominio (OU) específico, use el parámetro SearchBase:
Get-ADComputer -SearchBase ‘OU=Moscú,DC=winitpro,DC=loc’ -Filter * -Properties * | Nombre FT, Última fecha de inicio de sesión -Tamaño automático

Ordenemos los resultados de la consulta por el momento del último inicio de sesión en la red (campo LastLogonDate) usando el comando Clasificar:

Get-ADComputer -Filter * -Properties * | Ordenar última fecha de inicio de sesión | Nombre FT, Última fecha de inicio de sesión -Tamaño automático

Entonces, hemos recibido una lista de computadoras del dominio y la hora en que iniciaron sesión por última vez en la red Active Directory, ahora queremos bloquear las cuentas de las computadoras que no se han utilizado durante más de 120 días.

Usando Get-Date, obtenemos el valor de la fecha actual en la variable y restamos 120 días de la fecha actual:

$date_with_offset= (Obtener-Fecha).AddDays(-120)

La variable de fecha resultante se puede utilizar como filtro para la solicitud Get-ADComputer utilizando el campo LastLogonDate

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset) | Ordenar última fecha de inicio de sesión | Nombre FT, Última fecha de inicio de sesión -Tamaño automático

Así, recibimos una lista de computadoras inactivas que no han estado registradas en la red durante más de 120 días. Usando el comando Desactivar ADAccount Apaguémoslos.

Consejo. Por primera vez es mejor probar los resultados del comando usando el interruptor Y si, que asegura que el comando no realice ningún cambio, mostrando lo que sucederá cuando se ejecute.

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonData -lt $date_with_offset) | Set-ADComputer -Enabled $false -whatif

Ahora puedes bloquear todas las cuentas de computadora recibidas:

Get-ADComputer -Properties LastLogonDate -Filter (LastLogonData -lt $datecutoff) | Set-ADComputer -Enabled $false

Get-ADComputer: ejemplos prácticos de uso

A continuación se muestran algunos comandos de ejemplo más útiles que utilizan el cmdlet Get-ADComputer.

Obtenga la cantidad de computadoras en Active Directory:

Get-ADComputer -Filter (SamAccountName -like "*") | Objeto de medida

Lista de computadoras cuyos nombres comienzan con BuhPC:

Get-ADComputer -Filter "Nombre -como "BuhPC*"" -Properties Dirección IPv4 | Nombre de la tabla de formato, nombre de host DNS, dirección IPv4 -A

Seleccione todas las estaciones de trabajo que ejecutan Windows XP:

Get-ADComputer -Filter (Sistema Operativo -como "*XP*")

Seleccione solo sistemas de servidor:

Get-ADComputer -Filter ( Sistema operativo -Como "*Windows Server*" ) -Propiedades Sistema operativo | Seleccione Nombre, Sistema Operativo | Formato-Tabla –Tamaño automático

Obtenga una lista de servidores en un dominio con la versión del sistema operativo y el Service Pack instalado:
Get-ADComputer -Filter (Sistema Operativo -Como "*Windows Server*" ) -Propiedad * | Formato-Nombre de tabla, Sistema operativo, Paquete de servicio del sistema operativo -Wrap -Auto

Para eliminar todas las cuentas de computadora en un dominio que no han sido parte del dominio durante más de 6 meses, puede usar el comando:

get-adcomputer -properties lastLogonDate -filter * | donde ( $_.lastLogonDate -lt (get-date).addmonths(-6) ) | Quitar-ADComputer

Seleccione computadoras desconectadas en una unidad organizativa específica:

Get-ADComputer -filter * -SearchBase "OU=Computadoras, dc=winitpro,dc=loc" | Objeto-Dónde ($_.enabled -eq $False)

Los resultados del comando se pueden exportar a un archivo de texto:

Get-ADComputer -Filter ( Sistema operativo -Como "*Windows Server*" ) -Propiedades Sistema operativo | Seleccione Nombre, Sistema operativo | Formato-Tabla -AutoSize C:\Script\server_system.txt

O archivo CSV:

Get-ADComputer -Filter * -Property * | Seleccionar nombre de objeto, sistema operativo, paquete de servicio del sistema operativo | Exportar-CSV All-Windows.csv -NoTypeInformation -Codificación UTF8

Para realizar una acción específica con todas las computadoras de la lista resultante, debe usar el bucle Foreach. En este ejemplo, queremos generar una lista de servidores en el dominio (la lista debe contener el nombre del servidor, el fabricante del servidor y el modelo).

$Computadoras = Get-ADComputer -Filter (Sistema Operativo -Como "*Windows Server*")
Foreach ($Computadora en $Computadoras)
{
$Nombre de host = $Nombre.de.computadora
$ComputerInfo = (Obtener-WmiObject -Nombre de la computadora$Nombre de host Win32_ComputerSystem)
$Fabricante = $Computadora.Fabricante
$Modelo = $Computadora.Modelo
Write-Host "Nombre: $Hostname"
Write-Host "Fabricante: $Fabricante"
Write-Host "Modelo: $Modelo"
Host de escritura " "
$Contenido = "$Nombre de host;$Fabricante;$Modelo"
Agregar contenido -Valor$Contenido -Camino"C:\PS\ServersInfo.txt"
}

Alternativamente, puedes usar una sintaxis de bucle más corta. Digamos que necesitamos ejecutar un determinado comando en todas las computadoras en una determinada unidad organizativa (en este ejemplo queremos ejecutar el comando de actualización de la política de grupo en todos los servidores):

get-adcomputer -SearchBase "OU=Servidores,DC=winitpro,DC=loc" -Filter * | %( Invocar-Comando -Computadora $_.Nombre -ScriptBlock (gpupdate /force) )

Dedicado al uso de PowerShell para administrar AD. Como punto de partida, el autor decidió tomar 10 tareas comunes de administración de AD y observar cómo se pueden simplificar usando PowerShell:

  1. Restablecer contraseña de usuario
  2. Activar y desactivar cuentas
  3. Desbloquear cuenta de usuario
  4. Eliminar cuenta
  5. Encuentra grupos vacíos
  6. Agregar usuarios a un grupo
  7. Listar miembros del grupo
  8. Encuentra cuentas de computadora obsoletas
  9. Desactivar una cuenta de computadora
  10. Buscar computadoras por tipo

Además, el autor mantiene un blog (usando PowerShell, por supuesto), recomendamos echarle un vistazo: jdhitsolutions.com/blog. Y puedes obtener la información más actualizada desde su Twitter. twitter.com/jeffhicks.
A continuación se muestra la traducción del artículo "Las 10 principales tareas de Active Directory resueltas con PowerShell".

Administrar Active Directory (AD) usando Windows PowerShell es más fácil de lo que piensas y quiero demostrártelo. Simplemente puede tomar los scripts a continuación y usarlos para resolver una serie de tareas de administración de AD.

Requisitos

Para utilizar PowerShell para administrar AD, debe cumplir varios requisitos. Voy a demostrar cómo funcionan los cmdlets de AD usando una computadora con Windows 7 como ejemplo.
Para utilizar los cmdlets, debe tener un controlador de dominio de Windows Server 2008 R2 o puede descargar e instalar el servicio Active Directory Management Gateway en controladores de dominio heredados. Lea atentamente la documentación antes de la instalación; Es necesario reiniciar el CD.
En el lado del cliente, descargue e instale (RSAT) para Windows 7 o Windows 8. En Windows 7, deberá abrir en Paneles de control capítulo Programas y elige Activar o desactivar las funciones de Windows. Encontrar Herramientas de administración remota del servidor y ampliar la sección Herramientas de administración de roles. Seleccione los elementos apropiados para AD DS y AD LDS Tools, especialmente tenga en cuenta que el elemento debe estar seleccionado Módulo de Active Directory para Windows PowerShell, como se muestra en la Figura 1. (En Windows 8, todas las herramientas están seleccionadas de forma predeterminada). Ahora estamos listos para trabajar.

Fig.1 Habilitación de las herramientas AD DS y AD LDS

He iniciado sesión con una cuenta con derechos de administrador de dominio. La mayoría de los cmdlets que mostraré le permitirán especificar credenciales alternativas. En cualquier caso, recomiendo leer la ayuda ( Obtener ayuda) y ejemplos que demostraré a continuación.
Inicie una sesión de PowerShell e importe el módulo:

PS C:\> Módulo de importación ActiveDirectory

La importación crea un nuevo PSDrive, pero no lo usaremos. Sin embargo, puede ver qué comandos están disponibles en el módulo importado.

PS C:\> get-command -módulo ActiveDirectory

Lo bueno de estos comandos es que si puedo usar un comando en un objeto AD, entonces se puede usar en 10, 100 e incluso 1000. Veamos cómo funcionan algunos de estos cmdlets.

Tarea 1: restablecer la contraseña del usuario

Comencemos con una tarea típica: restablecer la contraseña de un usuario. Puedes hacer esto fácil y simplemente usando un cmdlet. Establecer contraseña de cuenta AD. La parte complicada es que la nueva contraseña debe calificarse como una cadena protegida: un fragmento de texto cifrado y almacenado en la memoria durante la sesión de PowerShell. Primero, creemos una variable con la nueva contraseña:
PS C:\> $new=Read-Host "Ingrese la nueva contraseña" -AsSecureString

Luego, ingrese una nueva contraseña:

Ahora podemos extraer la cuenta (usando samNombre de cuenta– la mejor opción) y establezca una nueva contraseña. Aquí hay un ejemplo para el usuario Jack Frost:

PS C:\> Establecer-ADAccountPassword jfrost -NuevaContraseña $nueva

Desafortunadamente, hay un error con este cmdlet: -Passthru, -Y si, Y -Confirmar no funcione. Si prefieres un atajo, prueba esto:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

Como resultado, necesito que Jack cambie su contraseña la próxima vez que inicie sesión, así que modifico la cuenta usando Set-ADUser.

PS C:\> Set-ADUser jfrost -ChangePasswordAtLogon $True

Los resultados de ejecutar el cmdlet no se escriben en la consola. Si es necesario hacer esto, utilice -Verdadero. Pero puedo saber si la operación fue exitosa o no recuperando el nombre de usuario usando el cmdlet. Obtener-ADUser y especificando la propiedad Contraseña caducada, como se muestra en la Figura 2.


Arroz. 2. Resultados del cmdlet Get-ADUser con la propiedad PasswordExpired

En pocas palabras: restablecer la contraseña de un usuario usando PowerShell no es nada difícil. Admito que restablecer la contraseña también es fácil mediante un complemento. Usuarios y computadoras de Active Directory consolas Consola de administración de Microsoft (MMC). Pero usar PowerShell es apropiado si necesita delegar una tarea, no desea implementar el complemento mencionado anteriormente o está restableciendo una contraseña como parte de un gran proceso de TI automatizado.

Tarea 2: Activar y desactivar cuentas

Ahora desactivemos la cuenta. Sigamos trabajando con Jack Frost. Este código utiliza el parámetro -Y si, que puedes encontrar en otros comadlets que realizan cambios para probar mi comando sin ejecutarlo.

PS C:\> Disable-ADAccount jfrost -whatif ¿Qué pasa si: Realizar la operación "Establecer" en el objetivo "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

Ahora desactivémoslo de verdad:

PS C:\> Desactivar-ADAAccount jfrost

Y llegado el momento de activar la cuenta, ¿qué cmdlet nos ayudará?

PS C:\> Habilitar-ADAccount jfrost

Estos cmdlets se pueden usar en una expresión canalizada, lo que le permite activar o desactivar tantas cuentas como desee. Por ejemplo, este código desactivará todas las cuentas del departamento de Ventas.

PS C:\> get-aduser -filter "departamento -eq "ventas"" | deshabilitar una cuenta

Por supuesto, escribe un filtro para Obtener-ADUser bastante complicado, pero aquí es donde el uso del parámetro -Y si junto con el cmdlet Desactivar ADAccount viene al rescate.

Tarea 3: desbloquear la cuenta de usuario

Considere una situación en la que Jack bloqueó su cuenta mientras intentaba ingresar una nueva contraseña. En lugar de intentar encontrar su cuenta a través de la GUI, el procedimiento de desbloqueo se puede realizar mediante un simple comando.

PS C:\> Desbloquear-ADAAccount jfrost

El cmdlet también admite parámetros. -Y si Y -Confirmar.

Tarea 4: Eliminar cuenta

No importa cuántos usuarios elimines: es fácil de hacer usando el cmdlet Eliminar-ADUser. No quiero eliminar Jack Frost, pero si quisiera, usaría un código como este:

PS C:\> Remove-ADUser jfrost -whatif ¿Qué pasa si: Realizar la operación "Eliminar" en el objetivo "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

O puedo ingresar varios usuarios y eliminarlos con un simple comando:

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Empleados, DC=Globomantics,DC=Local" | donde ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Eliminar-ADuser -whatif

Este comando buscará y eliminará cualquier cuenta organizativa de empleados deshabilitada que no haya sido modificada durante 180 días o más.

Tarea 5: Encontrar grupos vacíos

Gestionar grupos es una tarea interminable e ingrata. Hay muchas formas de encontrar grupos vacíos. Algunas expresiones pueden funcionar mejor que otras, dependiendo de su organización. El siguiente código encontrará todos los grupos del dominio, incluidos los integrados.

PS C:\> get-adgroup -filter * | donde (-No ($_ | get-adgroupmember)) | Seleccionar nombre

Si tiene grupos con cientos de miembros, usar este comando puede llevar mucho tiempo; Obtener-ADGroupMember comprueba cada grupo. Si puedes limitarlo o personalizarlo será mejor.
Aquí hay otro enfoque:

PS C:\> get-adgroup -filter "miembros -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Grupos,OU=Empleados,DC=Globomantics, DC=local" | Seleccione Nombre, Grupo*

Este comando busca todos los grupos universales que no son miembros de grupos de unidades organizativas y muestra algunas de las propiedades. El resultado se muestra en la Figura 3.


Arroz. 3. Buscar y filtrar grupos universales.

Tarea 6: Agregar usuarios a un grupo

Agreguemos a Jack Frost al grupo de TI de Chicago:

PS C:\> add-adgroupmember "chicago IT" -Miembros jfrost

Sí, es así de simple. También puedes agregar fácilmente cientos de usuarios a grupos, aunque esto me parece un poco incómodo:

PS C:\> Add-ADGroupMember "Empleados de Chicago" -miembro (get-aduser -filter "city -eq "Chicago"")

Utilicé la expresión canalizada entre paréntesis para encontrar todos los usuarios que tienen la propiedad de la ciudad en Chicago. El código entre paréntesis se ejecuta y los objetos resultantes se pasan al parámetro –Member. Cada objeto de usuario se agrega al grupo Empleados de Chicago. No importa si se trata de 5 o 5000 usuarios, actualizar las membresías del grupo solo lleva unos segundos. Esta expresión también se puede escribir usando Para cada objeto lo que podría ser más conveniente:

PS C:\> Get-ADUser -filter "ciudad -eq "Chicago"" | foreach (Add-ADGroupMember "Empleados de Chicago" -Miembro $_)

Tarea 7: enumerar los miembros del grupo

Es posible que desee saber quién está en un grupo determinado. Por ejemplo, periódicamente debes averiguar quién es miembro del grupo de administradores de dominio:

PS C:\> Get-ADGroupMember "Administradores de dominio"

La figura 4 muestra el resultado.


Arroz. 4. Miembros del grupo de administradores de dominio.

El cmdlet muestra el objeto AD para cada miembro del grupo. ¿Qué hacer con los grupos anidados? Mi grupo Chicago All Users es una colección de grupos anidados. Para obtener una lista de todas las cuentas, sólo tengo que usar el parámetro –Recursivo.

PS C:\> Get-ADGroupMember "Todos los usuarios de Chicago" -Recursivo | Seleccione nombre distinguido

Si desea ir por el otro lado, busque en qué grupos se encuentra un usuario, use la propiedad de usuario miembro de:

PS C:\> get-aduser jfrost -property Miembro de | Seleccione -ExpandProperty memberOf CN=NewTest,OU=Grupos,OU=Empleados, DC=GLOBOMANTICS,DC=local CN=Chicago Test,OU=Grupos,OU=Empleados, DC=GLOBOMANTICS,DC=local CN=Chicago IT,OU= Grupos,OU=Empleados, DC=GLOBOMANTICS,DC=local CN=Chicago Sales Usuarios,OU=Grupos,OU=Empleados, DC=GLOBOMANTICS,DC=local

utilicé el parámetro -ExpandirPropiedad para mostrar nombres miembro de como líneas.

Tarea 8: encontrar cuentas de computadora obsoletas

Me hacen mucho esta pregunta: "¿Cómo encuentro cuentas de computadora obsoletas?" Y siempre respondo: “¿Qué está desactualizado para ti?” Las empresas tienen diferentes definiciones de cuándo una cuenta de computadora (o una cuenta de usuario, no importa) se considera obsoleta y ya no se puede utilizar. Para mí, presto atención a aquellas cuentas cuyas contraseñas no han sido cambiadas durante un cierto período de tiempo. Para mí, este período es de 90 días; si la computadora no cambió la contraseña junto con el dominio durante este período, lo más probable es que esté fuera de línea y desactualizada. cmdlet utilizado Obtener-ADComputadora:

PS C:\> get-adcomputer -filter "Contraseña última configuración -lt "1/1/2012"" -properties *| Seleccione nombre, contraseña, último conjunto

El filtro funciona muy bien con un valor fijo, pero este código se actualizará para todas las cuentas de computadora que no hayan cambiado sus contraseñas desde el 1 de enero de 2012. Los resultados se muestran en la Figura 5.


Arroz. 5. Encuentra cuentas de computadora obsoletas

Otra opción: supongamos que se encuentra al menos en el nivel funcional del dominio de Windows 2003. Filtrar por propiedad. Último sello de hora de inicio de sesión. Este valor es el número de intervalos de 100 nanosegundos desde el 1 de enero de 1601 y está almacenado en GMT, por lo que trabajar con este valor es un poco complicado:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | seleccione nombre, lastlogontimestamp, @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp))),contraseñalastset | Ordenar último inicio de sesión marca de tiempo


Arroz. 6. Convierta el valor de LastLogonTimeStamp a un formato familiar

Para crear un filtro, necesito convertir la fecha, por ejemplo, 1 de enero de 2012, al formato correcto. La conversión se realiza en FileTime:

PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

Ahora puedo usar esta variable en el filtro para Obtener-ADComputadora:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -o (lastlogontimestamp -notlike "*")" -property * | Seleccionar nombre, último inicio de sesión, marca de tiempo, contraseña, último conjunto

El código anterior encuentra las mismas computadoras que se muestran en la Figura 5.

Tarea 9: Desactivar la cuenta de la computadora

Quizás cuando encuentres cuentas inactivas u obsoletas, quieras desactivarlas. Esto es bastante fácil de hacer. Usaremos el mismo cmdlet que usamos para trabajar con cuentas de usuario. Puedes aclararlo usando samNombre de cuenta cuenta.

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif Qué pasa si: Realizar la operación "Establecer" en el destino "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local".

O usando una expresión de canalización:

PS C:\> get-adcomputer "chi-srv01" | Desactivar ADAccount

También puedo usar mi código para encontrar cuentas obsoletas y desactivarlas todas:

PS C:\> get-adcomputer -filter "Contraseña última configuración -lt "1/1/2012"" -properties *| Desactivar ADAccount

Tarea 10: buscar computadoras por tipo

También me preguntan a menudo cómo encontrar cuentas de computadora por tipo, como servidores o estaciones de trabajo. Esto requiere algo de creatividad de tu parte. No hay nada en AD que distinga un servidor de un cliente, excepto quizás el sistema operativo. Si su computadora ejecuta Windows Server 2008, deberá realizar algunos pasos adicionales.
Primero, necesita obtener una lista de sistemas operativos y luego filtramos las cuentas por sistemas operativos disponibles.

PS C:\> Get-ADComputer -Filter * -Properties Sistema operativo | Seleccione Sistema operativo -único | Ordenar sistema operativo

Los resultados se muestran en la Figura 7.


Arroz. 7. Recuperar la lista de sistemas operativos

Quiero encontrar todas las computadoras que ejecutan un sistema operativo de servidor:

PS C:\> Get-ADComputer -Filter "OperatingSystem -like "*Server*"" -properties OperatingSystem,OperatingSystem ServicePack | Seleccione Nombre,Op* | lista de formatos

Los resultados se muestran en la Figura 8.

Al igual que otros cmdlets AD Get, puede personalizar los parámetros de búsqueda y limitar la solicitud a unidades organizativas específicas si es necesario. Todas las expresiones que he mostrado se pueden integrar en expresiones de PowerShell más grandes. Por ejemplo, puede ordenar, agrupar, aplicar filtros, exportar a CSV o crear y enviar informes HTML por correo electrónico, ¡todo desde PowerShell! En este caso, no tendrás que escribir ni un solo guión.
Aquí hay una ventaja adicional: un informe de antigüedad de la contraseña del usuario, guardado en un archivo HTML:

PS C:\> Get-ADUser -Filter "Habilitado -eq "Verdadero" -AND ContraseñaNeverExpires -eq "False"" -Propiedades ContraseñaLastSet,ContraseñaNeverExpires,ContraseñaExpired | Seleccione Nombre distinguido, Nombre, contraseña*,@(Nombre="Edad de la contraseña"; Expresión=((Get-Date)-$_.PasswordLastSet)) |ordenar Edad de la contraseña -Descending | ConvertTo-Html -Title "Informe de antigüedad de contraseña" | Out-File c:\Work\pwage.htm !}

Aunque esta expresión puede parecer un poco intimidante, es fácil de usar con un conocimiento mínimo de PowerShell. Y sólo queda un último consejo: cómo definir una propiedad personalizada llamada ContraseñaEdad. El valor representa la brecha entre hoy y la propiedad PasswordLastSet. Luego ordeno los resultados para mi nueva propiedad. La Figura 9 muestra el resultado de mi pequeño dominio de prueba.

Actualización:
La publicación contiene una traducción del artículo del portal.




Arriba