Start, Logon, Logoff und Shutdown

  • Hey Bitnugger,

    an der Stelle erstmal vielen Dank für deine ganzen Hinweise und Verbesserungsvorschläge.

    Habe fast alles so in mein Script übernehmen können.

    Einige Sachen waren mir komplett neu.

    Zu deinem Script noch eine Frage.

    Kannst du es noch um eine weitere Information erweitern?

    Ich würde gern noch den aktuell angemeldeten User mit ausgewertet bekommen.

    Habe mich selbst schon daran versucht...aber ich bekomme leider immer noch den User zurückgemeldet, der das Script ausführt.

    Die beste Stelle wäre:

    Abfragedatum : Abfragezeit : Rechnername : CurrentUser : _CheckBootUp()

  • Habe mich selbst schon daran versucht...aber ich bekomme leider immer noch den User zurückgemeldet, der das Script ausführt.

    Zeige mal bitte, wie du es versucht hast.

    Hier ein paar Möglichkeiten...

  • Also mein Ziel ist es ja, den User mit in die Fileausgabe zu packen.

    Im nachfolgenden Code, hatte ich die Zeile mit "_FileWriteLog()" als die Stelle ausgemacht, die das Ausgabefile mit Daten versorgt.

    Aber mir ist es nicht möglich, aus

    AutoIt
    _FileWriteLog($hFile, StringFormat('%-26s : %s', $aRechner[$i], (@error ? 'offline' : _GetLastBootUp($aRechner[$i]))))

    ein einfaches

    AutoIt
    _FileWriteLog($hFile, StringFormat('%-26s : %s', $aRechner[$i], _GetUserName($strClient), (@error ? 'offline' : _GetLastBootUp($aRechner[$i]))))

    zu machen.

    Denn dann werden die nachfolgenden Informationen nicht weitergeschrieben.

    Und ich erhalte immernoch meinen den Username der das Script ausführt (also meinen)

    Zeige mal bitte, wie du es versucht hast.

    Hier ein paar Möglichkeiten...

  • 2 Mal editiert, zuletzt von Bitnugger (2. März 2018 um 21:56)

  • Tausend Dank dafür!

    Ich brauche wahrscheinlich noch eine ganze Weile um deinen gesamten Code zu verstehen.

    Kann nicht ganz nachvollziehen, wie der Aufbau von _FileWriteLog ist und wo genau die Ausgabe in die Datei erfolgt.

    Vielleicht kannst du dazu ja noch etwas loswerden?

    Und dann habe ich noch eine abschließende Frage.

    Kannst du evtl. noch folgenden Code einbauen und noch zusätzlich in der Datei (als extra Spalte) ausgeben lassen?

    AutoIt
    func getRegData()
        Local $sRegData = RegRead("HKEY_CURRENT_USER\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
        Return $sRegData
    EndFunc ;getRegData()

    Denn zusätzlich zu dem angemeldeten User, würde ich gern noch wissen, wie der letzte USER der Anmeldung in dem o.g. Programm lautet.

    Es kommt nicht selten vor, dass wir an einem Rechner nur eine Anmeldung haben aber für das Programm dann mehrere USER die sich anmelden.

    Um zum Zeitpunkt X zu ermitteln, welcher User an welchem Rechner arbeitet, ist diese Information ebenfalls von Wichtigkeit.

  • Kann nicht ganz nachvollziehen, wie der Aufbau von _FileWriteLog ist und wo genau die Ausgabe in die Datei erfolgt.

    Vielleicht kannst du dazu ja noch etwas loswerden?

    _FileWriteLog schreibt das aktuelle Datum, die Uhrzeit und den angegebenen Text in eine Protokolldatei. Mit StringFormat formatieren wir den angegebenen Text.

    Hier die Version mit _GetRegData()

    Und BITTE: Zitiere künftig nicht mehr komplette Nachrichten oder Scripte, sondern nur den relevanten Teil, der zum Verständnis nötig ist.

  • Vielen Dank für die Erklärung und den Code.

    Allerdings habe ich jetzt ein kleines Problem bei dem Ergebnis.

    Das Script sollte eigentlich den Registry-Eintrag von jedem abzufragenden Rechner auslesen und zurückgeben.

    Aktuell, liest es nur meinen Registry-Eintrag aus und gibt für alle Rechner den selben Anmelder zurück.

    Wie löse ich das Problem?

  • Wie löse ich das Problem?

    Um auf den Ziel-Rechnern die Registry lesen/schreiben zu können, muss dort der Dienst "Remoteregistrierung" ausgeführt werden.

    Lösung 1: Dienste mit services.msc (auf den Ziel-Rechnern) konfigurieren

    Windows + R drücken, services.msc eingeben, mit Enter abschicken.

    Permanent: Den Starttyp für den Dienst Remoteregistrierung auf Automatisch umstellen und den Dienst starten.

    Temporär: Den Dienst Remoteregistrierung starten.

    Lösung 2: Dienste mit sc.exe (auf den Ziel-Rechnern) konfigurieren

    Windows + R drücken, cmd.exe eingeben, mit Enter abschicken.

    Permanent: sc.exe config RemoteRegistry start=auto & sc.exe start RemoteRegistry

    Temporär: sc.exe start RemoteRegistry

    Lösung 3: Dienste mit psexec.exe (auf dem PC, auf dem das Script ausgeführt wird) konfigurieren

    ; ComputerName, UserName und Passwort mit den realen Daten ersetzen!

    Permanent: psexec \\ComputerName -u UserName -p Passwort -h sc.exe config RemoteRegistry start=auto & psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Temporär: psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Download psexec: https://technet.microsoft.com/de-de/sysinternals/bb897553.aspx

    Lösung 3 habe ich dir noch in das Script eingebaut...

    Einmal editiert, zuletzt von Bitnugger (7. März 2018 um 21:02)

  • Lösung 3: Dienste mit psexec.exe (auf dem PC, auf dem das Script ausgeführt wird) konfigurieren

    ; ComputerName, UserName und Passwort mit den realen Daten ersetzen!

    Permanent: psexec \\ComputerName -u UserName -p Passwort -h sc.exe config RemoteRegistry start=auto & psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Temporär: psexec \\ComputerName -u UserName -p Passwort -h sc.exe start RemoteRegistry

    Download psexec: https://technet.microsoft.com/de-de/sysinternals/bb897553.aspx

    Wieder einmal vielen Dank für deine ausführliche Beschreibung.

    Lösung 3 ist tatsächlich auch die einzige, die für meinen Fall wirklich in Frage kommen wird.

    Allerdings habe ich noch Probleme mit dem Script.

    Leider kommt die Abfrage von Benutzername etc. nicht hoch und wenn ich die Credentials direkt im Script hinterlege dann kommt es ebenfalls zu Fehlern.

    Code
    psexec (start) Error = 1326!

    Und dann musst du mir bitte noch verraten, wie ich die Lösung 3 permanent hinterlegen kann.

    Habe versucht über die Konsole den Befehl psexec \\... auszuführen aber es bricht dann doch sehr schnell ab.

  • Leider kommt die Abfrage von Benutzername etc. nicht hoch und wenn ich die Credentials direkt im Script hinterlege dann kommt es ebenfalls zu Fehlern.

    Code
    psexec (start) Error = 1326!

    Vielleicht noch was zu den Credentials:

    $sComputerName = 'Rechnername@Domain' 'Domain\Rechnername' 'Rechnername' 'Domain.Rechnername'

    $sUserName = 'Benutzername'

    $sPasswort = 'Passwort'

    leider kommt bei allen Varianten der selbe Fehler

  • Ich habe jetzt noch folgenden Schritt unternommen:

    ich habe die PSTools unter System32 abgelegt, sodass ich sie bequemer über die Konsole aufrufen kann.

    Dann gebe ich folgendes ein:

    Code
    psexec \\RECHNERNAME -h sc.exe start RemoteRegistry

    Danach erscheint die Meldung:

    Code
    [SC] StartService FEHLER 1058:
    
    Der angegebene Dienst kann nicht gestartet werden. Er ist deaktiviert oder nicht mit aktivierten Geräten verbunden.
    
    sc.exe exited on RECHNERNAME with error code 1058.

    Vielleicht hilft das noch?

  • Hier ein Beispiel, wie es bei mir funktioniert:

    Rechnername: ILLUMINATI

    IP-Adresse: 192.168.178.26

    psexec \\ILLUMINATI -h sc.exe start RemoteRegistry

    psexec \\192.168.178.26 -h sc.exe stop RemoteRegistry

    oder...

    psexec \\ILLUMINATI -h sc.exe start RemoteRegistry

    psexec \\192.168.178.26 -h sc.exe stop RemoteRegistry

    Rechnername: Server

    IP-Adresse: 192.168.178.31

    psexec \\Server -h sc.exe start RemoteRegistry

    psexec \\192.168.178.31 -h sc.exe stop RemoteRegistry

    oder...

    psexec \\Server -h sc.exe start RemoteRegistry

    psexec \\192.168.178.31 -h sc.exe stop RemoteRegistry

    Eine Domain gibst du nur an, wenn du mit dem PC an einer Domain angemeldet bist. Meldest du dich an einem lokalen Konto an, darfst du keine Domain angeben, da es diese dann ja nicht gibt oder sie in dem Fall zumindest nicht relevant ist.

    Die Anmeldedaten als Klartext im Script zu speichern, ist sicher keine gute Idee... schau dir dazu z.B. mal die Funktion _Crypt_HashData an...

  • Hier ein Beispiel, wie es bei mir funktioniert:

    Rechnername: ILLUMINATI

    IP-Adresse: 192.168.178.26

    psexec \\ILLUMINATI -h sc.exe start RemoteRegistry

    Habe es jetzt so mal in die Konsole eingegeben und komme damit zu einem Ergebnis

    pasted-from-clipboard.png

    Wenn ich nun das Script ausführe, kommt allerdings einer der Fehler:

    Code
    2018-03-12 14:10:12 : Rechnername            : Benutzername        : pSAG nicht installiert!    : 2018-03-12 07:44:41

    Ich kann aber mit einer Gewissheit von 100% sagen, dass das Programm installiert ist und auch der Eintrag in der Registry vorhanden ist.

    Hast du noch eine Ahnung, woran es liegen könnte?

  • Dann ändere mal die Zeile 95 in dem Script aus Post #28.

    AutoIt
    $sUserID = RegRead("\\" & $sComputerName & "\HKCU64\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
    ; oder so...
    $sUserID = RegRead("\\" & $sComputerName & (@OSArch = "X86" ? "\HKCU" : "\HKCU64") & "\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
  • Windows hat aus Kompatibilitätsgründen zwei separate "Ansichten" für die Registry. Das hängt mit 32/64 Bit zusammen. Wenn der Registry-Eintrag von einem 64-Bit-Programm ist, könnte dir eventuell helfen, dein AutoIt-Skript auch als 64 Bit auszuführen.

    Hey Chesstiger, vielen Dank für den Hinweis.

    Derzeit kann ich aber sagen, dass wir vor der nächsten Migration noch komplett mit einer 32Bit Umgebung in diesem Programm unterwegs sind.


    Dann ändere mal die Zeile 95 in dem Script aus Post #28.

    AutoIt
    $sUserID = RegRead("\\" & $sComputerName & "\HKCU64\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")
    ; oder so...
    $sUserID = RegRead("\\" & $sComputerName & (@OSArch = "X86" ? "\HKCU" : "\HKCU64") & "\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session", "UserID")

    Auch wieder Danke an dich Bitnugger für deine viele Mühe und Geduld.

    Ich komme aber leider noch immer nicht zu dem gewünschten Ergebnis.

    Ich habe den Code nochmal ein kleines bisschen abgeändert:

    Denn wenn ich es händisch über die Konsole eingebe, verzichte ich auf die Eingabe von UserName und Passwort.

    Das habe ich jetzt mal an das Script so übergeben.

    Nach dem Kompilieren, kommt ganz normal das Konsolenfenster hoch und die Abfrage des ersten Rechners startet.

    Nun kommt folgende Fehlermeldung.

    pasted-from-clipboard.png

    Ich bin mir einfach nicht sicher, ob das alles richtig läuft.

    So langsam gebe ich die Hoffnung auf, jemals an die gewünschte Information zu kommen...

  • Das ist nicht wirklich ein Fehler... damit wird dir nur mitgeteilt, dass bereits eine Instanz dieses Dienstes ausgeführt wird!!!

    Teste mal dieses Script...

    $iError = RunWait(StringFormat('psexec \\\%s -h sc.exe start RemoteRegistry', $sComputerName, $sUserName, $sPasswort))

    Richtig wäre...

    $iError = RunWait(StringFormat('psexec \\\%s -h sc.exe start RemoteRegistry', $sComputerName))

  • Hallo zusammen,

    ich weis zwar nicht ob der Hinweis hier angebracht ist, aber es gibt eine Software die ich nutze für genau so welche Sachen. Sie nennt sich CheckMK und ist kostenfrei. Erfordert aber einen Server. Ich nutze dafür meinen BananaPi.

    Hier ein paar Beispiele:

    - User die sich einloggen

    - Wann der PC ausgeschaltet wurde

    - Wann er wieder online war

    - CPU Auslastung

    - RAM Auslastung

    - Aktuelle Prozesse die Offen sind

    usw.

    Damit kann man fast alles Tracken! Und das was es noch nicht fertig als Plugin gibt kann man sich selber auch über cmd befehle auslesen und in den Plugin Ordner legen.

    Ich nutze das für meine Unterschiedlichen Server und wenn es Probleme gibt lasse ich mir per die Info´s bei kritischen Fehlern per Email senden.

  • Das ist nicht wirklich ein Fehler... damit wird dir nur mitgeteilt, dass bereits eine Instanz dieses Dienstes ausgeführt wird!!!

    Teste mal dieses Script...

    Richtig wäre...

    $iError = RunWait(StringFormat('psexec \\\%s -h sc.exe start RemoteRegistry', $sComputerName))

    Habe dein neues Script getestet.

    Leider immer noch ohne das gewünschte Ergebnis.

    Ich habe auch das Gefühl, dass der RemoteRegistry Dienst getriggert wird auf dem/den Zielrechner/n aber danach kein "echtes" Auslesen des Keys stattfindet.

    Bin mittlerweile an dem Punkt, dass ich ein separates Programm auf den Clients ablege und dieses dann auf Anfrage den Key ausließt und zurück schreibt.

    TheDeath24

    Willkommen im Thema ;)

    CheckMK ist eine feine Sache und wir planen auch es in Betrieb zu nehmen - allerdings für ein breiteres Monitoring.

    Was ich allerdings schaffen will, ist eine einfache Webansicht mit allen Rechnern, die online sind, mit den dazugehörigen Benutzern etc.

    Somit kannst du pfeilschnell den Rechner finden und musst dich nicht erst durch CheckMK wuseln.

    Aber dennoch Danke für deinen Beitrag - CheckMK ist wirklich ein geniales Tool.

  • Ich habe auch das Gefühl, dass der RemoteRegistry Dienst getriggert wird auf dem/den Zielrechner/n aber danach kein "echtes" Auslesen des Keys stattfindet.

    Uns interessieren nur Fakten...

    Gib mal die folgenden Befehle in einer Eingabeaufforderung auf einem der Remote-Rechner ein, den du bereits mit dem Autoit-Script angesprochen hast und poste die Ausgabe (als Bild) hier.

    Code
    pushd C:
    echo USERDOMAIN = %USERDOMAIN%
    
    sc.exe query winmgmt
    netsh advfirewall firewall show rule name="Windows-Verwaltungsinstrumentation (WMI eingehend)"
    reg query "HKCU\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session" /v UserID /reg:32
    IF %ERRORLEVEL% reg query "HKCU\SOFTWARE\pSAG\proalpha-client-production\5.1\proALPHA Session" /v UserID /reg:64

    Das sollte dann etwa so aussehen... ich habe allerdings einen anderen Unterschlüssel aus HKCU\SOFTWARE\ genommen, weil ich die pSAG-Software ja nicht installiert habe.

    pasted-from-clipboard.png