web-dev-qa-db-fra.com

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

Je dois 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?

17
Bob

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 4: 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 d'utilisateurs, 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 cela et l'utiliser.

13
Bratch

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.

19
Neobyte

Il existe un moyen plus simple.

L'objet ADSI a une méthode appelée ConvertLargeIntegerToInt64. Notez que c'est une méthode de l'objet ADSI et pas le système .__ Comobject qui est retourné 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
Adi Inbar

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
3
William

Ajoutez la fonction ConvertADSLargeInteger à votre script, vous pouvez l'obtenir ici:

PowerShell: convertir Active Directory IADSLargeInteger en System.Int64

Voici comment vous l'utiliseriez:

$user = [adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net"
[datetime]::FromFileTimeUtc((ConvertADSLargeInteger $user.pwdlastset.value))
1
Mike Pfeiffer

Installer: 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.

1
baz

vous devriez peut-être envisager d'utiliser la propriété passwordLastChanged. Regardez ici pour plus d'informations: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk