Powershell: Comment puis-je interroger pwdLastSet et le faire comprendre?


17

J'ai besoin d'obtenir le dernier changement de mot de passe pour un groupe de comptes dans un groupe de sécurité Active Directory, et je pense que c'est quelque chose que PowerShell devrait être bon.

En ce moment, je suis déjà bloqué sur la façon de lire l'attribut pwdLastSet du compte AD que je regarde. Même exécuter quelque chose de simple comme ça:

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

donne des résultats pour pwdLastSet qui ressemblent à ceci:

pwdLastSet            : {System.__ComObject}

Je sens que je m'y trompe, alors quelle est la meilleure façon d'interroger puis de formater la sortie (la valeur est basée sur l'époque de Windows et pas très lisible par l'homme) de l'attribut pwdLastSet?

Réponses:


13

Vous pouvez également le faire sans composant logiciel enfichable. Je l'ai essayé et ça marche:

PS #> $ searcher = New-Object DirectoryServices.DirectorySearcher
PS #> $ searcher.Filter = "(& (samaccountname = user1))"
PS #> $ results = $ searcher.findone ()
PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0])

Mercredi 10 juin 2009 16:32:08

J'obtiens également un System .__ ComObject pour pwdLastSet si j'ai l'objet utilisateur défini comme ceci:
$ user = [adsi] "LDAP: // cn = user1, ou = Staff, ou = Comptes utilisateur, dc = ramalamadingdong, dc = net "

Il devrait y avoir un moyen d'utiliser [System .__ ComObject] .InvokeMember () et la réflexion pour obtenir cette valeur pwdLastSet à partir de l'objet $ user, mais je n'ai pas pu le faire correctement. Je ne l'ai jamais compris, j'ai donc utilisé l'exemple ci-dessus et j'ai continué.

Si vous allez faire beaucoup de travail avec AD (ou Exchange ou SQL Server), vous voudrez peut-être obtenir le composant logiciel enfichable pour l'utiliser et l'utiliser.


1
J'ai essayé de faire diverses tâches simples dans PowerShell pour essayer d'apprendre la syntaxe. J'étais un peu déprimé que partout où je regardais, la réponse était d'utiliser un complément. Merci!
Bob

19

Les commandlets AD intégrés fournis avec Windows 7 / Windows Server 2008 R2 peuvent désormais le faire assez simplement. Sur Windows 7 à partir d'une invite Powershell:

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

L'attribut "PasswordLastSet" semble être une version traduite de l'attribut "pwdLastSet" réel.


Juste curieux de savoir ce qui signifie absence de toute valeur pour PasswordLastSet ... Cela signifie-t-il à 100% qu'il n'y a eu aucun changement depuis que le mot de passe a été défini initialement?
Mikhail

Je n'ai pas de boîte pour le tester, mais je pense qu'il est plus probable qu'aucun mot de passe n'a encore été défini sur l'objet.
Neobyte

@Mikhail, la plupart du temps, aucune valeur de PasswordLastSet ne signifie que vous n'exécutez pas la commande dans une invite élevée.
JPBlanc

3

Il existe un moyen plus simple.

L'objet ADSI a une méthode appelée ConvertLargeIntegerToInt64. Notez qu'il s'agit d'une méthode de l'objet ADSI et non du comobject System .__ qui est renvoyé en interrogeant la valeur d'un attribut d'horodatage, donc $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () ne fonctionnera pas. Vous devez l'invoquer comme suit:

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

Cela vous donnera l'horodatage LDAP, qui doit être converti en une date lisible, comme expliqué par Bratch ci-dessus. Cela fonctionnera pour toute valeur d'attribut d'horodatage renvoyée par le fournisseur ADSI, et la méthode ConvertLargeIntegerToInt64 est (je crois) exposée par tout objet représentant une entrée de répertoire.

Dans l'ensemble, voici comment vous obtenez la date à laquelle le mot de passe a été défini pour la dernière fois:

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

3

Voici un moyen simple d'afficher les ordinateurs AD:

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

1

Installez: http://www.quest.com/powershell/activeroles-server.aspx

PowerShell ouvert

Exécutez les commandes suivantes:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft displayname, PasswordLastSet

La première commande charge le composant logiciel enfichable de quête que vous venez de télécharger. Vous n'avez pas besoin de le faire si vous utilisez le raccourci pour rechercher dans votre menu de démarrage. La deuxième commande obtient une liste de tous les utilisateurs et de la dernière modification du mot de passe.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.