Creé un script de PowerShell 5.1 para exportar todos los usuarios en la base de datos y guardar todos los datos en un archivo CSV. El script le permite establecer una fecha en el tiempo para que pueda decidir desde cuándo desea que se exporten sus usuarios.
Después de algunas pruebas, me di cuenta de que no todos los usuarios se exportan y, tras investigar más a fondo, me di cuenta de que la propiedad WhenChanged
y WhenCreated
no están presentes para cada usuario. A pesar de que la interfaz de usuario de AD muestra la propiedad con los datos correctos, como se ve en la captura de pantalla siguiente.
Cuando ejecuto el siguiente comando:
Get-ADUser -filter * -Properties LastLogonDate, userPrincipalName, initials, WhenCreated, whenChanged | Select-Object userPrincipalName, initials, whenCreated, whenChanged
Obtengo el siguiente resultado:
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE
[email protected] MM
[email protected] RW
[email protected] KK
[email protected] AP
[email protected] JS
[email protected] CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
[email protected]
[email protected] TT
Como puede ver, el usuario con las iniciales TT no tiene ningún valor a pesar de que la captura de pantalla muestra que las tiene. A pesar de que creé este usuario hoy y cambié algunos valores el mismo día.
Preguntas
- ¿Qué me estoy perdiendo?
- ¿Es un problema con el propio AD o simplemente con el comando?
Respuesta1
La solución al problema es hacer clic derecho en el acceso directo de PowerShell y seleccionar Run as Administrator
. Tienes que hacer esto incluso si ya eres administrador. Si hace eso y ejecuta el comando nuevamente, todos sus datos estarán allí.
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE 11/16/2017 1:11:30 PM 11/22/2017 4:11:37 PM
[email protected] MM 11/16/2017 1:12:02 PM 11/22/2017 4:11:37 PM
[email protected] RW 11/16/2017 1:12:40 PM 11/22/2017 4:11:37 PM
[email protected] KK 11/16/2017 1:13:13 PM 11/22/2017 4:11:37 PM
[email protected] AP 11/16/2017 1:14:15 PM 11/22/2017 4:11:37 PM
[email protected] JS 11/16/2017 1:14:50 PM 11/22/2017 4:11:37 PM
[email protected] CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
11/22/2017 3:37:49 PM 2/16/2018 2:50:25 PM
11/22/2017 3:38:43 PM 2/17/2018 3:58:24 PM
[email protected] 11/22/2017 4:02:18 PM 11/22/2017 4:41:36 PM
[email protected] TT 2/21/2018 1:21:13 PM 2/21/2018 1:59:17 PM
Respuesta2
Como tú, cuando ejecuté este comando:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' | select whenchanged
la fecha siempre estaba vacía. Encontré este artículo:https://www.itprotoday.com/powershell/view-all-properties-ad-objects-powershelleso me mostró cómo enumerar todas las propiedades de un objeto:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *
Lo que me lleva a esta variación de mi consulta para mostrar apropiadamente cuandoChanged (o cualquier otra propiedad):
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *| select whenchanged
Tenga en cuenta que puede reemplazar el "*" con una lista delimitada por comas de las propiedades que le interesan; esto probablemente tenga implicaciones de rendimiento si tiene conjuntos de datos grandes o RAM limitada.
Espero que esto ayude a otros.