OVH Cloud OVH Cloud

lastlogontimestamp impossible à recupérer

4 réponses
Avatar
truc
bonjour

J'ai besoin de recuperer la date de derniere connexion des utilisateurs.
Lorsque j'execute mon script pour avoir le DN ça fonctionne mais lorsque je
remplace le DN par l'attribut lastlogintimestamp, j'ai une erreur qui me dit
:
Erreur d'execution Microsoft VBScript:Type incompatible.
Si quelqu'un avait une idée ?

merci

voici mon script

Set cnx = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
cnx.Provider = "ADsDSOObject"
cnx.Open "Active Directory Provider"

With cmd
.ActiveConnection = cnx
.CommandText = _
"Select distinguishedName, sAMAccountname, lastLogonTimestamp"
& _
" FROM 'LDAP://OU=users,OU=truc,DC=root,DC=local'" & _
" WHERE objectCategory = 'person' AND objectClass = 'user'" & _
" ORDER BY sAMAccountname"
.Properties("Page Size") = 5000
End With

Set result = cmd.Execute
result.MoveFirst

Do While NOT result.EOF
wscript.echo result.Fields("lastLogonTimestamp")
result.MoveNext
loop

result.close
Set result = Nothing
Set cnx = Nothing

4 réponses

Avatar
Fred
Dans son message
truc nous dit :

bonjour

J'ai besoin de recuperer la date de derniere connexion des
utilisateurs. Lorsque j'execute mon script pour avoir le DN ça
fonctionne mais lorsque je remplace le DN par l'attribut
lastlogintimestamp, j'ai une erreur qui me dit

Erreur d'execution Microsoft VBScript:Type incompatible.

Si quelqu'un avait une idée ?

merci

voici mon script

Set cnx = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
cnx.Provider = "ADsDSOObject"
cnx.Open "Active Directory Provider"

With cmd
.ActiveConnection = cnx
.CommandText = _
"Select distinguishedName, sAMAccountname,
lastLogonTimestamp" & _
" FROM 'LDAP://OU=users,OU=truc,DC=root,DC=local'" & _
" WHERE objectCategory = 'person' AND objectClass > 'user'" & _ " ORDER BY sAMAccountname"
.Properties("Page Size") = 5000
End With

Set result = cmd.Execute
result.MoveFirst

Do While NOT result.EOF
wscript.echo result.Fields("lastLogonTimestamp")
result.MoveNext
loop

result.close
Set result = Nothing
Set cnx = Nothing


Bonsoir,
Le problème vient du type du champ lastLogonTimestamp.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstdatatypeenum.asp
Le type est 12, soit adVariant, non supporté par ADO.

Pourquoi n'utilises-tu pas les objets ADSI comme dans les exemples donnés
ici :
http://www.microsoft.com/technet/scriptcenter/scripts/ad/default.mspx
La référence ici pour faire soit même les scripts
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/using_adsi.asp



--
Fred


Avatar
Jean
D'après la documentation lastLogonTimestamp est un entier 64 bits signé
non interprétable par vbscript.
Les propriétés HighPart et LowPart retournent des entiers 32 bits non
signés pour lastLogonTimeStamp :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/s_interval.asp

Donc essayez la conversion suivante:

Do While NOT result.EOF
With result.Fields("lastLogonTimestamp")
wscript.echo .HighPart*(2^32)+.LowPart
End With
result.MoveNext
loop

... dans votre code.

Cf :
http://msdn.microsoft.com/library/en-us/adsi/adsi/iadslargeinteger_property_methods.asp?frame=true

Amicalement,

bonjour

J'ai besoin de recuperer la date de derniere connexion des utilisateurs.
Lorsque j'execute mon script pour avoir le DN ça fonctionne mais lorsque je
remplace le DN par l'attribut lastlogintimestamp, j'ai une erreur qui me dit

Erreur d'execution Microsoft VBScript:Type incompatible.

Si quelqu'un avait une idée ?

merci

voici mon script

Set cnx = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
cnx.Provider = "ADsDSOObject"
cnx.Open "Active Directory Provider"

With cmd
.ActiveConnection = cnx
.CommandText = _
"Select distinguishedName, sAMAccountname, lastLogonTimestamp"
& _
" FROM 'LDAP://OU=users,OU=truc,DC=root,DC=local'" & _
" WHERE objectCategory = 'person' AND objectClass = 'user'" & _
" ORDER BY sAMAccountname"
.Properties("Page Size") = 5000
End With

Set result = cmd.Execute
result.MoveFirst

Do While NOT result.EOF
wscript.echo result.Fields("lastLogonTimestamp")
result.MoveNext
loop

result.close
Set result = Nothing
Set cnx = Nothing


--
Jean - JMST
Belgium


Avatar
Fred
Dans le message:,
D'après la documentation lastLogonTimestamp est un entier 64 bits
signé non interprétable par vbscript.
Les propriétés HighPart et LowPart retournent des entiers 32 bits non
signés pour lastLogonTimeStamp :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/s_interval.asp

Donc essayez la conversion suivante:

Do While NOT result.EOF
With result.Fields("lastLogonTimestamp")
wscript.echo .HighPart*(2^32)+.LowPart
End With
result.MoveNext
loop


Bonjour,
Effectivement cela fonctionne avec
Fields("LastLogonTimestamp").Value.HighPart
Quand j'avais testé le type, j'avais oublié le Value dont le type est bien 9
: Automation Object et non Variant.


--
Fred

Avatar
Jean
Merci pour le retour.
La théorie rejoint la pratique :-)

Dans le message:,
D'après la documentation lastLogonTimestamp est un entier 64 bits
signé non interprétable par vbscript.
Les propriétés HighPart et LowPart retournent des entiers 32 bits non
signés pour lastLogonTimeStamp :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adschema/adschema/s_interval.asp

Donc essayez la conversion suivante:

Do While NOT result.EOF
With result.Fields("lastLogonTimestamp")
wscript.echo .HighPart*(2^32)+.LowPart
End With
result.MoveNext
loop


Bonjour,
Effectivement cela fonctionne avec
Fields("LastLogonTimestamp").Value.HighPart
Quand j'avais testé le type, j'avais oublié le Value dont le type est bien 9
: Automation Object et non Variant.


amicalement,

--
Jean - JMST
Belgium