[PowerShell] Aide - erreur de mon script

Aide - erreur de mon script [PowerShell] - Management du SI - Systèmes & Réseaux Pro

Marsh Posté le 02-12-2015 à 10:27:00    

Bonjour,
 
J'essai, à partir d'un script, de retrouver la date et l'heure de la dernière connexion des utilisateurs à l'AD (Active Directory).
 
Voici mon script de départ :

Code :
  1. $ldapQuery = "(&(objectCategory=user))"
  2. $de = new-object system.directoryservices.directoryentry
  3. $ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery
  4. $complist = $ads.findall()
  5. foreach ($i in $complist) {
  6. $lastlogon = $i.Properties.lastlogontimestamp
  7. Write-host $lastlogon
  8. write-host $i.Path
  9. }


Lorsque je fais ça, le terminal m'affiche une valeur qui représente le temps écoulé depuis le 1er janvier 1601 en dizaines de milliers de millisecondes. (ex. : 130927363912565975)
Donc il ne me reste plus qu'a convertir ce nombre en date.
pour cela j'utilise ceci :

Code :
  1. [datetime]::FromFileTime(130927363912565975)
  2. qui donne :
  3. jeudi 26 novembre 2015 06:20:00


Jusque là pas de souci, mais là ou j'ai un souci c'est lorsque j'ajoute au-dessus dans mon premier script cette conversion, j'ai un problème.
 
Voici le script :

Code :
  1. $ldapQuery = "(&(objectCategory=user))"
  2. $de = new-object system.directoryservices.directoryentry
  3. $ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery
  4. $complist = $ads.findall()
  5. foreach ($i in $complist) {
  6. $lastlogon = $i.Properties.lastlogontimestamp
  7. [datetime]::FromFileTime($lastlogon) # c'est ici que j'ai un souci voir l'erreur renvoyée ci-dessous
  8. Write-host $lastlogon # j'ai laissé ceci qui m'affiche la valeur en dizaines de milliers de millisecondes
  9. write-host $i.Path
  10. }


erreur renvoyée :
 
Impossible de convertir l'argument «fileTime» (valeur «System.DirectoryServices.ResultPropertyValueCollection») de «FromFileTime» en type «System.Int64»: «Impossible de convertir la valeur «
System.DirectoryServices.ResultPropertyValueCollection» du type «System.DirectoryServices.ResultPropertyValueCollection» en type «System.Int64».»
Au caractère C:\Users\monlogin\Documents\Exercices PowerShell\Date dernière connexion des objets à OU.ps1:8 : 1
+ [datetime]::FromFileTime($lastlogon)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (: ) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

 
et affiche bien le reste du script aussi:

Code :
  1. 130927364072372498
  2. LDAP://CN=James Bond,CN=Users,DC=MI6,DC=BE


 
Si quelqu'un a une solution, je suis preneur... Merci !

Reply

Marsh Posté le 02-12-2015 à 10:27:00   

Reply

Marsh Posté le 02-12-2015 à 10:34:32    

Mais pourquoi tu n'utilises pas le module Active Directory déjà ?

Reply

Marsh Posté le 02-12-2015 à 11:20:21    

nebulios a écrit :

Mais pourquoi tu n'utilises pas le module Active Directory déjà ?


Honnêtement, je n'ai jamais utilisé le module AD.

Reply

Marsh Posté le 02-12-2015 à 11:38:42    

plutôt

Code :
  1. $lastlogon = $i.Properties.lastlogontimestamp.Value
 

Après j'ai rarement vu un code aussi dégueulasse

Message cité 1 fois
Message édité par Je@nb le 02-12-2015 à 13:23:44
Reply

Marsh Posté le 02-12-2015 à 11:48:27    

Je@nb a écrit :

plutôt

Code :
  1. $lastlogon = $i.Properties.lastlogontimestamp.Value


 
Après j'ai rarement vu un code aussi dégueulasse


 
Je débute, je ne suis pas expert en Powershell...
 
Sinon, avec le ".Value", j'ai la date du 1 janvier 1601 qui s'affiche pour tous les comptes... (ça voudrait dire que $lastlogon ne reçoit aucune valeur?)


Message édité par recep le 02-12-2015 à 11:51:08
Reply

Marsh Posté le 02-12-2015 à 13:18:10    

Commence par te renseigner sur la façon dont fonctionne Powershell, les modules etc. plutôt que de réinventer la roue alors.

Reply

Marsh Posté le 02-12-2015 à 13:23:48    

essaie

Code :
  1. $lastlogon = $i.Properties["lastlogontimestamp"][0]

Reply

Marsh Posté le 02-12-2015 à 15:09:01    

Je@nb a écrit :

essaie

Code :
  1. $lastlogon = $i.Properties["lastlogontimestamp"][0]



Merci cela fonctionne...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed