17 votos

Powershell: ¿Cómo se consulta pwdLastSet y tiene sentido?

Necesito conseguir el último cambio de contraseña para un grupo de cuentas en Active Directory grupo de seguridad, y siento que esto es algo PowerShell debe ser bueno en el.

Ahora, ya estoy atascado en cómo leer el atributo pwdLastSet de la cuenta de AD estoy mirando. Incluso con algo tan simple como esto:

[adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net" | Format-List *

da resultados para pwdLastSet que aparecen como este:

pwdLastSet            : {System.__ComObject}

Me siento como voy a hacer acerca de esto de la manera equivocada, así que ¿cuál es la mejor manera de consulta y, a continuación, el formato de la salida (el valor está basado en el Windows Época y no muy legible) de la pwdLastSet atributo?

19voto

Neobyte Puntos 2782

Incorporado el ANUNCIO commandlets que vienen con Windows 7/Windows Server 2008 R2 ahora puede hacer esto simplemente suficiente. En Windows 7 desde un símbolo del sistema de Powershell:

Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List

El "PasswordLastSet" atributo que parece ser una versión traducida de la real "pwdLastSet" atributo.

14voto

Bratch Puntos 378

También se puede hacer esto sin un complemento. Lo probé y funcionó:

PS #> $usuario=New-Object DirectoryServices.DirectorySearcher
PS #> $usuario.Filter="(&(samaccountname=usuario1))"
PS #> $resultados=$buscador.findone()
PS #> [datetime]::fromfiletime($resultados.propiedades.pwdlastset[0])

Miércoles, junio 10, 2009 4:32:08 PM

También tengo un Sistema.__ComObject para pwdLastSet si tengo el objeto de usuario juego como este:
$usuario = [adsi] "LDAP://cn=usuario1,ou=Personal,ou=Cuentas de Usuario,dc=ramalamadingdong,dc=net"

No debe ser una forma de uso [del Sistema.__ComObject].InvokeMember() y la reflexión para conseguir que pwdLastSet valor de $objeto de usuario, pero no he sido capaz de llegar a la derecha. Nunca me hizo entenderlo, así que he usado el ejemplo anterior y se trasladó.

Si vas a hacer un montón de trabajo con AD (o Exchange o SQL Server) es posible que desee obtener el complemento para ella y el uso que.

3voto

William Puntos 21

Aquí está una manera fácil de mostrar el ANUNCIO de los Equipos:

Get-ADComputer -Filter *  -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
  FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp | 
    Out-File Computers.csv

3voto

Adi Inbar Puntos 21

Hay una manera más fácil.

El COMPLEMENTO de objeto tiene un método llamado ConvertLargeIntegerToInt64. Tenga en cuenta que es un método para el COMPLEMENTO de objeto y no el Sistema.__Comobject que se devuelve al consultar el valor de una marca de tiempo attibute, por lo que $usuario.pwdLastSet.valor.ConvertLargeIntegerToInt64() no funcionará. Usted necesita para invocarlo de la siguiente manera:

$user.ConvertLargeIntegerToInt64($user.pwdLastSet.value)

Que conseguirá que el LDAP marca de tiempo, que debe ser convertida en una lectura de la fecha, como se explica por Bratch arriba. Esto funcionará para cualquier atributo de marca de tiempo del valor devuelto por el proveedor ADSI, y el ConvertLargeIntegerToInt64 método es (creo) expuestas por cualquier objeto que representa una entrada de directorio.

Poniendo todo junto, aquí es cómo obtener la fecha cuando la contraseña anterior:

$user = [ADSI]'LDAP://cn=someusername,ou=someou,dc=somedomain,dc=com'
[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($user.pwdLastSet.value))

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: