Jump to content

lastLogonTimestamp auslesen


Go to solution Solved by Nero2021,

Recommended Posts

Hallo,

 

ich habe vor einiger Zeit mal ein VB-Script zum Auslesen von AD Infos gefunden. Verwenden möchte ich den Beschreibung und das lastLogonTimeStamp aus dem AD

Die Beschreibung auslesen klappt prima. Wenn ich das Auslesen des TimeStamp aktiviere, dann funktioniert beides nicht mehr. Hat jemand eine Idee?

 

Über diese Zeile spreche ich:

wscript.echo "LastLogonTimeStamp:" & objComputer.lastLogonTimestamp

Kommentiere ich sie aus, wird die Beschreibung ausgelesen, ist sie aktiviert, wird nicht mehr ausgelesen.

 

'==========================================================================
Option Explicit
'On Error Resume Next
Dim strKeyPath
Dim strSearch
Dim strAdsPath
Dim strDefaultDomainNC
Dim strADSQuery
Dim objQueryResultSet
Dim objADOConn
Dim objADOCommand
Dim objUser
Dim objNetwork
Dim strcomputer
Dim oReg
dim WSHShell, WshNetwork, strResult, objSysInfo, strcomment, objComputer

' Registrypfad für Inventory setzen
strKeyPath = "SOFTWARE\Kunde"

Set WSHShell = WScript.CreateObject("WScript.Shell")

'Rechnername auslesen
Set objNetwork = Wscript.CreateObject("Wscript.Network")
strcomputer = objNetwork.ComputerName

Set WSHShell = WScript.CreateObject("WScript.Shell")

Set WshNetwork = WScript.CreateObject("WScript.Network")
WScript.Echo "Computer Name = " & WshNetwork.ComputerName

Set objSysInfo = CreateObject("ADSystemInfo")

Set objComputer = GetObject("LDAP://" & objSysInfo.ComputerName)
wscript.echo "AD-Description:" & objComputer.description
'wscript.echo "LastLogonTimeStamp:" & objComputer.lastLogonTimestamp

'Registryobjekt anlegen
const HKEY_LOCAL_MACHINE = &H80000002
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv")

'Registryschlüssel anlegen
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath

If not objComputer.description = "" Then
	oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,"Client_Description",objComputer.description
End if    
If not objComputer.LastLogonDate = "" Then
	oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,"LastLogonTimeStamp",objComputer.LastLogonTimeStamp
End if 

 

Link to post

Moin,

 

was hast du damit denn vor? Eigentlich macht man sowas heute nicht mehr per VBS. Wenn wir wissen, was damit geschehen soll, können wir dir vielleicht einen anderen Weg vorschlagen, statt hier ins Troubleshooting einzusteigen.

Genau an diesem Beispiel zeigt sich nämlich einer der vielen Nachteile von VBS: Es kann nicht mit 64-Bit-Integers umgehen, und lastLogonTimestamp gibt leider einen solchen zurück.

 

Gruß, Nils

 

Link to post
vor 40 Minuten schrieb NilsK:

Moin,

 

was hast du damit denn vor? Eigentlich macht man sowas heute nicht mehr per VBS. Wenn wir wissen, was damit geschehen soll, können wir dir vielleicht einen anderen Weg vorschlagen, statt hier ins Troubleshooting einzusteigen.

Genau an diesem Beispiel zeigt sich nämlich einer der vielen Nachteile von VBS: Es kann nicht mit 64-Bit-Integers umgehen, und lastLogonTimestamp gibt leider einen solchen zurück.

 

Gruß, Nils

 

Hallo Nils,

 

danke für deine schnelle Antwort.

Ich möchte die Computerbeschreibung und den letzten Kontakt des Clients aus dem AD auslesen. Diese Abfrage wird per Softwareverteilung am Client ausgeführt und in ein bestimmtes Tool eingetragen.

Ich bin ganz bei dir und würde diese Abfrage am liebsten per Powershell machen aber das kann WIn10 leider nicht ohne Nachinstallation des entsprechenden CMD-let. Also versuche ich es gerade mit dem VBS.

Liebe Grüße

Norbert

Link to post
vor 37 Minuten schrieb Nero2021:

Diese Abfrage wird per Softwareverteilung am Client ausgeführt und in ein bestimmtes Tool eingetragen.

 

Nur um da nix falsch zu verstehen: Das Tool, in das diese Informationen eingetragen werden, läuft auf dem jeweiligen Client? Darf man fragen, was das für ein Tool ist?

 

vor 37 Minuten schrieb Nero2021:

aber das kann WIn10 leider nicht ohne Nachinstallation des entsprechenden CMD-let

 

"cmdlet" .. klein und zusammen.  ;-)   ... man kann das AD auch ohne spezialisierte cmdlets abfragen. ;-)  ... was nicht heißen soll, dass das in diesem Fall ein gute Idee sein muss.

Edited by BOfH_666
Link to post
vor 24 Minuten schrieb BOfH_666:

 

Nur um da nix falsch zu verstehen: Das Tool, in das diese Informationen eingetragen werden, läuft auf dem jeweiligen Client? Darf man fragen, was das für ein Tool ist?

 

 

"cmdlet" .. klein und zusammen.  ;-)   ... man kann das AD auch ohne spezialisierte cmdlets abfragen. ;-)  ... was nicht heißen soll, dass das in diesem Fall ein gute Idee sein muss.

ich habe gerade das Gefühl, dass wir uns von meinem eigentlichen Thema entfernen. Mir reicht es völlig aus, wenn die AD Infos ausgelesen werden können und wie in meinem Beispiel in die Registry eingetragen werden.

Link to post
vor 16 Minuten schrieb Nero2021:

Mir reicht es völlig aus, wenn die AD Infos ausgelesen werden können und wie in meinem Beispiel in die Registry eingetragen werden.

 

Dann wird es Dich bestimmt freuen, zu hören, dass das mit PowerShell auch ohne installierte AD-cmdlets möglich ist.  ;-) 

 

query AD without RSAT   ... 

Link to post
vor 4 Stunden schrieb Nero2021:

Wenn ich das Auslesen des TimeStamp aktiviere, dann funktioniert beides nicht mehr.

 

Und welchen Fehlercode bekommst Du dann? "Funktioniert nicht mehr" ist etwas spärlich als Fehlerbeschreibung.

Link to post

Moin,

 

vor 38 Minuten schrieb daabm:

Und welchen Fehlercode bekommst Du dann? "Funktioniert nicht mehr" ist etwas spärlich als Fehlerbeschreibung.

ich mutmaße mal: Das Skript bricht wegen des Fehlers ab und gibt deshalb auch den Rest nicht mehr aus.

 

@Nero2021 wir haben jetzt den klassischen Fall, dass du dich auf dein Detailproblem fokussierst, statt das übergeordnete Ergebnis in den Blick zu nehmen. Was soll denn mit den Daten geschehen? Wäre es vielleicht schlauer, sie zentral auszulesen statt vom Client aus? 

 

Gruß, Nils

 

  • Like 1
Link to post
vor 10 Stunden schrieb NilsK:

Moin,

 

ich mutmaße mal: Das Skript bricht wegen des Fehlers ab und gibt deshalb auch den Rest nicht mehr aus.

 

@Nero2021 wir haben jetzt den klassischen Fall, dass du dich auf dein Detailproblem fokussierst, statt das übergeordnete Ergebnis in den Blick zu nehmen. Was soll denn mit den Daten geschehen? Wäre es vielleicht schlauer, sie zentral auszulesen statt vom Client aus? 

 

Gruß, Nils

Hallo Nils,

 

ich sehe das gerade mehr unter der Rubrik, lernen. Ich würde an dieser Stelle gerne verstehen wo der Fehler liegt.

Es gibt zwei Zeilen:

 

wscript.echo "AD-Description:" & objComputer.description
'wscript.echo "LastLogonTimeStamp:" & objComputer.lastLogonTimestamp

die Erste macht was sie soll. Die zweite sorgt dafür, dass auch die erste nicht mehr funktioniert, wenn sie dann aktiviert ist.

Liebe Grüße

Norbert

 

 

Link to post

Moin,

wenn Du in 2021 in der Windows Scripting-Welt was unter die Rubrik "lernen" stellen willst, lerne PowerShell, wie bereits von anderen angemerkt wurde.

 

In der Sache:

  1. Ich kann Dein berichtetes Verhalten hier nicht nachstellen, bei mir wird die erste Zeile immer korrekt ausgeführt. Die zweite Zeile wirft einen "Object doesn't support this property or method"-Fehler (den Du nicht erwähnt hast), was bedeutet, dass die Repräsentation des AD-Objektes nicht alle Attribute beinhaltet (welch Wunder!).
  2. lastLogon und lastLogonTimestamp sind int64-Zahlen. Damit kann ja schon PowerShell nicht 100% umgehen, VB eher zu 50%, und VBS schon gar nicht. Du kannst den Wert mit objComputer.GetEx("lastlogontimestamp") in eine Variable ziehen, aber VBS hat keinen kanonischen Konverter dafür in einen String. Somit wäre es ein klassischer Fall von "am Ende der Möglichkeiten des gewählten Systems angekommen".
Edited by cj_berlin
  • Like 3
Link to post

Moin,

 

warum beides nicht ausgeführt wird, kann ich auch nicht nachvollziehen. Wie führst du das Skript denn aus? Läuft es evtl. in einem Host, der nur dann die Ausgaben anzeigt, wenn es keine Fehler im gesamten Ablauf gibt?

 

Wenn es unbedingt die antike Technik sein soll und du nicht sagen willst, was damit geschehen soll, damit man es vielleicht insgesamt anders angehen kann, hier der klassische Artikel, der beschreibt, wie man genau diese Daten mit VBS abfragt:

https://devblogs.microsoft.com/scripting/dandelions-vcr-clocks-and-last-logon-times-these-are-a-few-of-our-least-favorite-things/

 

Deinem Skriptcode nach zu urteilen, baust du aber nicht auf bestehendem Wissen auf, und dann ist es wirklich nicht zukunftsweisend, auf eine Technik zu setzen, die seit 15 Jahren nicht mehr entwickelt wird. Aber das sagten wir vielleicht schon.

 

Gruß, Nils

 

  • Like 2
Link to post
  • Solution
vor 2 Stunden schrieb NilsK:

Moin,

 

warum beides nicht ausgeführt wird, kann ich auch nicht nachvollziehen. Wie führst du das Skript denn aus? Läuft es evtl. in einem Host, der nur dann die Ausgaben anzeigt, wenn es keine Fehler im gesamten Ablauf gibt?

 

Wenn es unbedingt die antike Technik sein soll und du nicht sagen willst, was damit geschehen soll, damit man es vielleicht insgesamt anders angehen kann, hier der klassische Artikel, der beschreibt, wie man genau diese Daten mit VBS abfragt:

https://devblogs.microsoft.com/scripting/dandelions-vcr-clocks-and-last-logon-times-these-are-a-few-of-our-least-favorite-things/

 

Deinem Skriptcode nach zu urteilen, baust du aber nicht auf bestehendem Wissen auf, und dann ist es wirklich nicht zukunftsweisend, auf eine Technik zu setzen, die seit 15 Jahren nicht mehr entwickelt wird. Aber das sagten wir vielleicht schon.

 

Gruß, Nils

 

 

Vielen Dank für eure Unterstützung. Ich habe nun auf PS gewechselt :) 

Meine Lösung

  • Like 1
Link to post
vor 2 Stunden schrieb Nero2021:

Vielen Dank für eure Unterstützung. Ich habe nun auf PS gewechselt :) 

Meine Lösung

 

Hmmm ...  das ist ein bissl missverständlich. In im "Titel" des Threads geht es eigentlich darum, die RSAT cmdlets ohne installierte RSAT zu nutzen, aber der als Antwort markierte Beitrag hat eigentlich nix damit zu tun.

 

Welche Lösung hast Du denn benutzt, wenn ich so neugierig sein darf? Das implicit Remoting oder die Lösung mit dem [adsisearcher]?

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...