Jonny F.: aktuelle angemeldete Benutzer auslesen

Hallo liebe selfhtml-ler,

Mit welcher Porgrammiersprache kann man realisieren das man die aktuellen Benutzernamen aus der Domaine liest.

Ich habe mir das so vorgestellt das wenn ich auf einen Button klicke er mit die Computernamen ausgibt mit den dazugerhörigen aktuell angemeldeten Benutzer. Die ausgabe würde ich gerne über php sprich html machen, wenn das nicht funktioniert bin ich für alles offen :).

Meine fähigkeiten belaufen sich von html, php, js, java und sql.

Ich denk mal für dieses Problem sind die jetzt nicht so geeignet aber ich bin lernwillig.

Bei uns muss sich jeder Benutzer am Computer anmelden, sprich Benutzername und Passwort erst dann wird in der Domaine überprüft also db ob er vorhanden ist dannach wird sein Account geladen mit den dazugehörigen Rechten.

Serverinformationen

System:
Linux

Apache Version:
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.4 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8

SERVER_SOFTWARE:
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.4 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8

Diese Infos habe ich jetzt aus der PHP Info ausgelsen,ich hoffe mir kann da jemand weiter helfen, ich weiß solche Themen gibts so oft wie Sand am Meer aber ich habe keine geeignete Lösung für mich gefunden. Bei uns wird in der Firma aber nur Firefox verwendet also VB ist da nicht geeignet.

Über Links zu Tutorials oder änliches wäre ich schon sehr froh.

MfG Jonny F.

  1. Neue Kenntnisse erworben.

    Wir haben schon so ein Inventarisierungsprogramm das die Hardware ect. eines Computer ausliest, diese funktioniert so dass ein Dienst auf dem PC läuft dass jede Stunde eine exe startet die halt die Sachen ausliest und in eine Datenbank schreibt.

    Kann ich es evtl. auf änliche weiße umsetzen, sprich das ich von einem externen Computer einen Dienst auf dem PC starten kann und der mir dann die angefragten Informationen übergibt (indem Fall den Computernamen und den Benuterznamen).

    MfG Jonny F.

    1. Entschuldigung das ich jetzt zum dritten mal was Poste aber habe noch was Interessantes gefunden.

      nbtscan Linux-Tool

      <Zitat>
      Nbtscan, das speziell für SMB-Netzwerke entworfen wurde, kann benutzt werden, um IP-Netzwerke zu scannen und diverse Informationen von SMB-Servern zu ermitteln einschließlich der Nutzernamen, Netzwerknamen, MAC-Adressen, ...
      </Zitat>

      Kennt sich jemand mit dem Tool aus, weil von der Ansicht unseres Linux-Servers ist es ein SMB Netzwerk

      MfG Jonny F.

  2. Hello,

    System:
    Linux

    Du meinst also, ob der User beim Linux-Host angemeldet ist?
    Es gibt z.B. die Kommandos

    • users
    • w
    • lastlog

    die noch verschiedene Schalter haben.

    Musst Du mal ausprobieren, welches Dir davon das gewünschte Ergebnis liefert?

    Um die Kommandos mit Root-Rechten aus einem PHP-Script heraus aufrufen zu können, empfiehlt sich ein Bash-Hüllscript, für das dann das SUID-Flag gesetzt wird.

    Das Script selber sollte dann aber nur durch root (Eigentümer) veränderbar sein!

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hallo,

    Serverinformationen

    System:
    Linux

    ausschließlich? Wird für die Verwaltung der Domäne

    [ ] Samba
        Version: __________
    [ ] ein Windows-Server
        Version: __________
    [ ] etwas anderes
        System:  __________
        Version: __________

    eingesetzt?

    Apache Version:
    Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.4 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g mod_perl/2.0.3 Perl/v5.8.8

    Der gute apache dürfte mit Deinem Problem höchstwahrscheinlich überhaupt nichts zu tun haben.

    Es kann möglich sein, diese Informationen anonym auszulesen.
    Es kann nötig sein, über einen Administratorenaccount zu verfügen.
    Letzteres ist in Windows-Domänen seit ca. 6 Jahren die Standardrichtlinie.

    Grundsätzlich ist Scriptomatic 2 eine ausgezeichnete Idee, um solche Informationen von einem dritten Client aus auszulesen.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      ausschließlich? Wird für die Verwaltung der Domäne

      [ ] Samba
           Version: ist ziemlich die neuste
       [ ] ein Windows-Server
           Version: der server ist von 2003

      genaueres Poste ich später.

      Es kann möglich sein, diese Informationen anonym auszulesen.
      Es kann nötig sein, über einen Administratorenaccount zu verfügen.

      Also Adminaccount verfüge ich, ich habe mir jetzt auch schon überlegt, weil ich wirklich nix finde - außer ich setze die Sicherheitseinstellen in den Keller und des is denk ich mal net so die Idee die einen Nobelpreis gewinnen würde - Ein Dienst auf dem Client zu starten der mir die Informationen einfach übergibt. Ist aber echt nur die Notfalllösung die ich nicht so gut finde.

      Grundsätzlich ist Scriptomatic 2 eine ausgezeichnete Idee, um solche Informationen von einem dritten Client aus auszulesen.

      Soweit ich des verstanden habe kompiliert das Programm mir meine Wünsche in fast jede beliebige Porgrammiersprache  oder habe ich da jetzt was falsch verstanden.

      Ich habe es über ein Linux-Tool names nbtscan probiert, jedoch wurde mir leider kein Benutzername wiedergeben lediglich nur der Rechnername und MAC Adresse, weißt du vielleicht warum, stehen diese Infos nicht im NetBios drinne oder warum ist das so.

      nbtscan IP Adresse eingeben und dann dann das Resultat.

      Dieses Tool war ideal, da ich es direkt mit PHP starten und ausgeben konnte.

      Danke für deinen Link muss ich mir mal näher anschaun.

      MfG Jonny F.

      1. Hallo,

        ausschließlich? Wird für die Verwaltung der Domäne

        [ ] Samba
             Version: ist ziemlich die neuste
        [ ] ein Windows-Server
             Version: der server ist von 2003

        bei dieser Konstellation verwendet man üblicherweise den Windows-Server als Domänencontroller, der die Anmeldung prüft.

        Es kann möglich sein, diese Informationen anonym auszulesen.
        Es kann nötig sein, über einen Administratorenaccount zu verfügen.

        Ich habe es über ein Linux-Tool names nbtscan probiert, jedoch wurde mir leider kein Benutzername wiedergeben lediglich nur der Rechnername und MAC Adresse, weißt du vielleicht warum, stehen diese Infos nicht im NetBios drinne oder warum ist das so.

        NetBIOS-Rechnernamen auszulesen ist kein Problem, die werden oft genug rumgeschickt. MAC-Adressen werden für den IP-Verkehr ebenfalls gebraucht, sind ebenfalls alles andere als geheim.

        Wie ich bereits schrieb, wird anonymes Auslesen von sensiblen Informationen wie den derzeit angemeldeten Benutzern seit ca. 6 Jahren standardmäßig nicht mehr zugelassen. Wenn nbtscan keine Optionen zur Authentifizierung kennt, kann es bei Normaleinstellung diese Informationen nicht mehr erhalten.

        Es könnte übrigens eine gute Idee sein, eine Rechtsberatung zur Erhebung solcher Daten einzuholen.

        Freundliche Grüße

        Vinzenz

        1. Hallo,

          Wie ich bereits schrieb, wird anonymes Auslesen von sensiblen Informationen wie den derzeit angemeldeten Benutzern ...

          ich verstehe nicht, inwiefern das "sensible Informationen" sind - Novell Netware scheint das wohl nicht so zu sehen. Da ist es ganz selbstverständlich, dass ich über das "Send Message"-Tool erst mal eine Liste der momentan am Server angemeldeten und als Empfänger in Frage kommenden Nutzer bekomme.

          Es könnte übrigens eine gute Idee sein, eine Rechtsberatung zur Erhebung solcher Daten einzuholen.

          Schaden kann's nicht, aber ... hmm ... ich find's übertrieben.

          So long,
           Martin

          --
          Die neue E-Mailadresse des Papstes: mailto:urbi@orbi
        2. Hallo,

          ausschließlich? Wird für die Verwaltung der Domäne

          [ ] Samba
               Version: ist ziemlich die neuste
          [ ] ein Windows-Server
               Version: der server ist von 2003

          bei dieser Konstellation verwendet man üblicherweise den Windows-Server als Domänencontroller, der die Anmeldung prüft.

          Ja entschuldigung, ich habe mich vertut :D. Also die
          Domainanmeldeüberprüfung erfolgt von zwei Servern, sprich zwei Server sind für die Anmeldung zuständig beide Windows 2003 Server.

          Ich habe es nun mit der psloggedon.exe Probiert, er liefert mir die Inforamtionen aber wie kann ich diese nun in PHP auswerten bzw. wie kann ich diese exe überhaupt starten von HTML wird es wohl kaum möglich sein.

          Es könnte übrigens eine gute Idee sein, eine Rechtsberatung zur Erhebung solcher Daten einzuholen.

          Warum sollte ich so eine Maßnahme ergreifen, Der Accountanmeldename ist ja nichts Privates oder er steht in unserer Tabelle und wird jede Stunde aktualisiert. Oder habe ich da irgendwas verpasst.

          MfG Jonny F.

          1. Hallo,

            Ich habe es nun mit der psloggedon.exe Probiert, er liefert mir die Inforamtionen aber wie kann ich diese nun in PHP auswerten bzw. wie kann ich diese exe überhaupt starten von HTML wird es wohl kaum möglich sein.

            warum willst Du diese Auswertung überhaupt über PHP starten?

            Ansonsten: wie üblich mit einer geeigneten Funktion zur Programmausführung.
            Und nein, das geht nicht auf Deiner Linux-Kiste.

            Ich persönlich würde das ganze über ein kleines Skript in $programmiersprache auf einem der Windows-Server per geplantem Task ausführen lassen. Du willst ja in engerem Zeitraster als der stündlich aktualisierten Tabelle prüfen.

            Es könnte übrigens eine gute Idee sein, eine Rechtsberatung zur Erhebung solcher Daten einzuholen.

            Warum sollte ich so eine Maßnahme ergreifen, Der Accountanmeldename ist ja nichts Privates oder er steht in unserer Tabelle und wird jede Stunde aktualisiert. Oder habe ich da irgendwas verpasst.

            Ich habe keine Ahnung, was Du mit den Daten vorhast. Bei der Sammlung von eindeutig personenbezogenen Daten, die man als Überwachung von Mitarbeitern auslegen könnte, ist es meist keine schlechte Idee, sich rechtlich, speziell datenschutzrechtlich abzusichern. Ob's notwendig ist? Keine Ahnung, ich bin kein Jurist.

            Freundliche Grüße

            Vinzenz

            1. Hallo,

              Ich habe es nun mit der psloggedon.exe Probiert, er liefert mir die Inforamtionen aber wie kann ich diese nun in PHP auswerten bzw. wie kann ich diese exe überhaupt starten von HTML wird es wohl kaum möglich sein.

              warum willst Du diese Auswertung überhaupt über PHP starten?

              Der Server auf dem das Script gespeichert wird unterstützt nicht grad viel, daswegen ist PHP für mich die beste Lösung.

              Ansonsten: wie üblich mit einer geeigneten Funktion zur Programmausführung.
              Und nein, das geht nicht auf Deiner Linux-Kiste.

              Hab ich vergessen zu Posten. Des mit dem Linux war ein Irrtum des Loginzeugs geht über zwei Windows 2003 Server. Also funktioniert es doch bit psloggedon.exe kann ich die variablen da irgendwie rauslesen.

              Ich persönlich würde das ganze über ein kleines Skript in $programmiersprache auf einem der Windows-Server per geplantem Task ausführen lassen. Du willst ja in engerem Zeitraster als der stündlich aktualisierten Tabelle prüfen

              Ja genau das ist mein Ziel

              MfG Jonny F.

              1. Hallo,

                warum willst Du diese Auswertung überhaupt über PHP starten?

                Der Server auf dem das Script gespeichert wird unterstützt nicht grad viel, daswegen ist PHP für mich die beste Lösung.

                auf diesen Windows-Servern dürfte ganz sicher VB-Script sowie JScript für den Windows-Scripting-Host verfügbar sein. Das sind schon mal zwei sehr mächtige Scriptsprachen. Was Du mit Bordmitteln machen kannst, was Du mit JScript machen kannst, wie Du die Ausgabe eines Kommandos zum Weiterverarbeiten einlesen kannst, wie Du Dateien schreiben kannst, kannst Du zum Beispiel diesem Archivbeitrag entnehmen.

                Nochmals: Ja, Du kannst das auch mit PHP anstoßen. Ich würd' die Kommandozeilenversion nehmen.

                Ansonsten: wie üblich mit einer geeigneten Funktion zur Programmausführung.
                Und nein, das geht nicht auf Deiner Linux-Kiste.

                Hab ich vergessen zu Posten. Des mit dem Linux war ein Irrtum des Loginzeugs geht über zwei Windows 2003 Server. Also funktioniert es doch bit psloggedon.exe kann ich die variablen da irgendwie rauslesen.

                klar. Ich hab' Dir doch eine ganze Liste von Funktionen gepostet. Lies Dir genau durch, welche was kann. Die Kurzbeschreibungen reichen, um eine erste engere Wahl zu treffen.

                Ich persönlich würde das ganze über ein kleines Skript in $programmiersprache auf einem der Windows-Server per geplantem Task ausführen lassen. Du willst ja in engerem Zeitraster als der stündlich aktualisierten Tabelle prüfen

                Dann lass Deinen Webserver aus dem Spiel. Nimm einen geplanten Task und schreibe das Skript in der Programmiersprache Deiner Wahl, die Du im geplanten Task nutzen kannst.

                Freundliche Grüße

                Vinzenz

                1. Guten Morgen,

                  warum willst Du diese Auswertung überhaupt über PHP starten?

                  Es muss nicht zwingend PHP sein, aber mit js kenne ich mich nicht so wirklich aus, und vbs funktioniert nicht da ich ja den Firefox verwende.

                  Ich habe mir nur gedacht das wenn es mit PHP geht ich ziemlich eigenständig Programmieren kann.

                  Ich hab jetzt zum Beispiel folgendes ausprobiert:

                  $tmp = exec("C:/Temp/loggedon.exe". $name, $results);
                  ich habe versucht die loggedon.exe zu öffnen und den Wert mir $name als anheing hineinzuschreiben aber ich bekomme nichts raus.

                  auf diesen Windows-Servern dürfte ganz sicher VB-Script sowie JScript für den Windows-Scripting-Host verfügbar sein. Das sind schon mal zwei sehr mächtige Scriptsprachen. Was Du mit Bordmitteln machen kannst, was Du mit JScript machen kannst, wie Du die Ausgabe eines Kommandos zum Weiterverarbeiten einlesen kannst, wie Du Dateien schreiben kannst, kannst Du zum Beispiel diesem Archivbeitrag entnehmen.

                  Wenn ich den Code aus deimen Link meinen Bedürfnisse angepasst habe, kann ich die ausgabe aber auch in html machen oder. Wenn ja wie würde es funktionieren.

                  Nochmals: Ja, Du kannst das auch mit PHP anstoßen. Ich würd' die Kommandozeilenversion nehmen.

                  Kannst du dies näher erläutern?

                  Meine Grundidee war es jetzt das ich den Computernamen aus eine Datenbank lese, daraufhin psloggedon.exe öffne (ja es funktioniert, ich habe bei der eingabe, nicht php sondern per kommandozeile einen Wert herausbekommen). Den Computer namen einzufügen, den ermittelten Wert in PHP ausgeben.

                  1. Abfrage machen
                  2. Exe öffnen und Name übergeben
                    $tmp = exec("C:/Temp/loggedon.exe". $name, $results);
                    und die Ausgabe in PHP anzeigen, aber es klappt nicht wirklich

                  So wie es aussieht muss ich doch auf js zurückgreifen, muss ich da eigentlich was an den Sicherheitseinstellungen veränden, ich habe gesehen das du ActivX verwendest.

                  MfG Jonny F.

                  1. Hallo,

                    warum willst Du diese Auswertung überhaupt über PHP starten?

                    Es muss nicht zwingend PHP sein, aber mit js kenne ich mich nicht so wirklich aus, und vbs funktioniert nicht da ich ja den Firefox verwende.

                    mache nichts von Hand, was Du automatisieren kannst. Insbesondere nicht, wenn das Automatisieren keinen zusätzlichen Aufwand bedeutet.

                    Ich habe mir nur gedacht das wenn es mit PHP geht ich ziemlich eigenständig Programmieren kann.

                    Ich hab jetzt zum Beispiel folgendes ausprobiert:

                    $tmp = exec("C:/Temp/loggedon.exe". $name, $results);

                    und warum sollte das "funktionieren"?
                    Wie sieht die Zeichenkette aus, die Du exec übergibst?
                    Wie sieht die Zeichenkette aus, die Du an der Kommandozeile übergeben musst?

                    Denke daran, dass es eine extrem gute Idee ist, Deine Daten kontextgerecht zu behandeln, d.h. escapeshellcmd zu nutzen.

                    auf diesen Windows-Servern dürfte ganz sicher VB-Script sowie JScript für den Windows-Scripting-Host verfügbar sein. Das sind schon mal zwei sehr mächtige Scriptsprachen. Was Du mit Bordmitteln machen kannst, was Du mit JScript machen kannst, wie Du die Ausgabe eines Kommandos zum Weiterverarbeiten einlesen kannst, wie Du Dateien schreiben kannst, kannst Du zum Beispiel diesem Archivbeitrag entnehmen.

                    Wenn ich den Code aus deimen Link meinen Bedürfnisse angepasst habe, kann ich die ausgabe aber auch in html machen oder. Wenn ja wie würde es funktionieren.

                    Selbstverständlich kannst Du mit JScript, VB-Script, Python, ... HTML-Code erzeugen.

                    Nochmals: Ja, Du kannst das auch mit PHP anstoßen. Ich würd' die Kommandozeilenversion nehmen.

                    Kannst du dies näher erläutern?

                    Mach' nichts clientseitig, was Du serverseitig erledigen kannst. Deswegen kannst Du *jede* Skriptsprache nutzen, die auf dem Server zur Verfügung steht, Du kannst *jede* Programmiersprache nutzen, mit der Du auf Deinem Server ausführbare Programme schreiben kannst.

                    Meine Grundidee war es jetzt das ich den Computernamen aus eine Datenbank lese,

                    welchen Computernamen? Welche Datenbank?
                    Du hast eine auf Deinem Server, die Du befragen kannst, das Active Directory.

                    daraufhin psloggedon.exe öffne (ja es funktioniert, ich habe bei der eingabe, nicht php sondern per kommandozeile einen Wert herausbekommen).

                    Die Ausgabe von psloggedon kannst Du durch diverse weitere Shellkommandos pipen, so dass nur der "reale" angemeldete Benutzer übrigbleibt. Sowas ist einfach superelegant.

                    So wie es aussieht muss ich doch auf js zurückgreifen, muss ich da eigentlich was an den Sicherheitseinstellungen veränden, ich habe gesehen das du ActivX verwendest.

                    äh ja. Ist ja auch kein Problem. Sowas wird *nicht* im Browser ausgeführt. Im Browser kannst Du Dir gerne serverseitig generiertes HTML ansehen :-)

                    Kurze Zwischenfrage: was willst Du mit den Resultaten anfangen? Sind die nur dazu da, um sich einen aktuellen Überblick zu verschaffen? Werden die aufgehoben?

                    Freundliche Grüße

                    Vinzenz

                    1. Morgen,

                      Ich hab jetzt zum Beispiel folgendes ausprobiert:

                      $tmp = exec("C:/Temp/loggedon.exe". $name, $results);

                      und warum sollte das "funktionieren"?
                      Wie sieht die Zeichenkette aus, die Du exec übergibst?
                      Wie sieht die Zeichenkette aus, die Du an der Kommandozeile übergeben musst?

                      Die exakte zeichenkette sieht so aus.

                      Erst der Pfad wo die exe drinne ist, Testweise habe ich die in Temp da im Pfad keine Leerzeichen bestehen. Ach ist es wichtig ob ich backslash oder normalen slash verwende?

                      so jetzt zur syntax: pfad/loggedon.exeleerschritt\PC_Name
                      C:\Temp slash oder backslash und dann die exe
                      und Bestätigen

                      Kann ich irgendwie überprüfen was in die exe eingetrage wird?

                      Denke daran, dass es eine extrem gute Idee ist, Deine Daten kontextgerecht zu behandeln, d.h. escapeshellcmd zu nutzen.

                      werd ich mir zu herzen nehmen, aber ich brauche ja einen Leerschritt.

                      auf diesen Windows-Servern dürfte ganz sicher VB-Script sowie JScript für den Windows-Scripting-Host verfügbar sein. Das sind schon mal zwei sehr mächtige Scriptsprachen. Was Du mit Bordmitteln machen kannst, was Du mit JScript machen kannst, wie Du die Ausgabe eines Kommandos zum Weiterverarbeiten einlesen kannst, wie Du Dateien schreiben kannst, kannst Du zum Beispiel diesem Archivbeitrag entnehmen.

                      Wenn ich den Code aus deimen Link meinen Bedürfnisse angepasst habe, kann ich die ausgabe aber auch in html machen oder. Wenn ja wie würde es funktionieren.

                      Selbstverständlich kannst Du mit JScript, VB-Script, Python, ... HTML-Code erzeugen.

                      Nochmals: Ja, Du kannst das auch mit PHP anstoßen. Ich würd' die Kommandozeilenversion nehmen.

                      Kannst du dies näher erläutern?

                      Mach' nichts clientseitig, was Du serverseitig erledigen kannst. Deswegen kannst Du *jede* Skriptsprache nutzen, die auf dem Server zur Verfügung steht, Du kannst *jede* Programmiersprache nutzen, mit der Du auf Deinem Server ausführbare Programme schreiben kannst.

                      Meine Grundidee war es jetzt das ich den Computernamen aus eine Datenbank lese,

                      welchen Computernamen? Welche Datenbank?

                      Durch das Inventarisierungsprogramm werden auch die Computernamen gespeichert, diese kann ich ja aus der Datenbank aufrufen.

                      Du hast eine auf Deinem Server, die Du befragen kannst, das Active Directory.

                      daraufhin psloggedon.exe öffne (ja es funktioniert, ich habe bei der eingabe, nicht php sondern per kommandozeile einen Wert herausbekommen).

                      per Kommandozeile bekomme ich auch einen Wert raus, nur wie bekomme ich das mit PHP hin?

                      Die Ausgabe von psloggedon kannst Du durch diverse weitere Shellkommandos pipen, so dass nur der "reale" angemeldete Benutzer übrigbleibt. Sowas ist einfach superelegant.

                      Kann ich mir vorstellen, schöner kanns net werden, natürlich ist die Vorraussetzung das ich weiß wie es funktioniert :D

                      So wie es aussieht muss ich doch auf js zurückgreifen, muss ich da eigentlich was an den Sicherheitseinstellungen veränden, ich habe gesehen das du ActivX verwendest.

                      äh ja. Ist ja auch kein Problem. Sowas wird *nicht* im Browser ausgeführt. Im Browser kannst Du Dir gerne serverseitig generiertes HTML ansehen :-)

                      Kurze Zwischenfrage: was willst Du mit den Resultaten anfangen? Sind die nur dazu da, um sich einen aktuellen Überblick zu verschaffen? Werden die aufgehoben?

                      Sie sind nur für den Überblick da, fall ich per Remote auf den PC zugreifen muss um Updates zu machen oder sowas.

                      MfG Jonny F.

                      PS. Vielen Dank für die kompetente Hilfe

                      1. Hallo,

                        Ich hab jetzt zum Beispiel folgendes ausprobiert:

                        $tmp = exec("C:/Temp/loggedon.exe". $name, $results);

                        und warum sollte das "funktionieren"?
                        Wie sieht die Zeichenkette aus, die Du exec übergibst?
                        Wie sieht die Zeichenkette aus, die Du an der Kommandozeile übergeben musst?

                        so jetzt zur syntax: pfad/loggedon.exeleerschritt\PC_Name

                        Schreib doch: C:\Temp\loggedon.exe \PC_Name
                        Wo ist das Leerzeichen in Deinem ersten Argument, das Du exec übergibst?

                        Ich gehe davon aus, dass es auf den Rechnern im Netzwerk *keine* lokalen Benutzer gibt, so dass sich höchstens ein Admin lokal anmelden könnte - und der sollte es besser wissen :-) Nehmen wir an, Deine Domäne heißt EXAMPLE (NetBIOS-Namen sind case-insensitiv und werden üblicherweise groß geschrieben), dann bekommst Du mit

                        path\to\psloggedon.exe -l -x \PC_NAME 2>NUL | FIND /I "EXAMPLE"

                        nur die Zeile mit dem lokal angemeldeten Benutzer (ggf. den lokal angemeldeten Benutzern). Das Ergebnis läßt sich mit $programmiersprache leicht weiterverarbeiten :-)

                        Dröseln wir die Anweisung auf:

                        -l liefert nur die lokal angemeldeten Benutzer
                          -x unterdrückt die Anmeldezeit

                        mit

                        2>NUL

                        leiten wir die Ausgabe des Standardfehlerkanals (der Copyrightvermerk von Sysinternals wird über den Standardfehlerkanal ausgegeben) ins Nirwana um.

                        Die reguläre Ausgabe (auf den Standardausgabekanal) leiten wir mit

                        | FIND /I "EXAMPLE"

                        durch den Befehl FIND, der nur die Zeilen aus seiner Eingabe zurückgibt, die die Zeichenkette EXAMPLE (deinen Domänennamen) enthalten, wobei Groß- und Kleinschreibung keine rolle spielt (wegen /I).

                        Sie sind nur für den Überblick da, fall ich per Remote auf den PC zugreifen muss um Updates zu machen oder sowas.

                        Willst Du dem guten Benutzer einen Ausweichrechner vorschlagen?

                        Freundliche Grüße

                        Vinzenz

                        1. Hallo,

                          Schreib doch: C:\Temp\loggedon.exe \PC_Name
                          Wo ist das Leerzeichen in Deinem ersten Argument, das Du exec übergibst?

                          Kann ich das leerzeichen in der Variable integrieren sprich &nbsp; + Inhalt oder würde es nicht funktionieren.

                          Ich gehe davon aus, dass es auf den Rechnern im Netzwerk *keine* lokalen Benutzer gibt, so dass sich höchstens ein Admin lokal anmelden könnte - und der sollte es besser wissen :-) Nehmen wir an, Deine Domäne heißt EXAMPLE (NetBIOS-Namen sind case-insensitiv und werden üblicherweise groß geschrieben), dann bekommst Du mit

                          path\to\psloggedon.exe -l -x \PC_NAME 2>NUL | FIND /I "EXAMPLE"

                          nur die Zeile mit dem lokal angemeldeten Benutzer (ggf. den lokal angemeldeten Benutzern). Das Ergebnis läßt sich mit $programmiersprache leicht weiterverarbeiten :-)

                          also wenn ich jetzt

                          c:/temp/loggedon.exe -l \khbiwas 2>NUL | FIND /I "EXAMPLE"
                          in die kommandozeile eingebe müsste ich ein ergebnis bekommen oder wie.

                          sprich in PHP würde es so aussehen, fals es mit pHP überhaupt funzzt.

                          $ergebnis = exec("c:/temp/psloggedon.exe -l".$name."2>NUL | FIND /I "EXAMPLE"", $result);

                          $name = "leer Name leer"

                          Dann müsste der array $result meinen gewünschten Wert (abhängig vom -x oder -l) haben und könnte ihn dementsprechend ausgeben.

                          Dröseln wir die Anweisung auf:

                          -l liefert nur die lokal angemeldeten Benutzer
                            -x unterdrückt die Anmeldezeit

                          Kann ich dieses -l oder -x auch einfach weglassen, weil ich frag ja eigentlich nur nach einem wenn ich den Computernamen eingebe, gibt es auch ne möglichkeit gleich alle auszulesen mit dazugehörigen Namen und Anmeldenamen.

                          mit

                          2>NUL

                          leiten wir die Ausgabe des Standardfehlerkanals (der Copyrightvermerk von Sysinternals wird über den Standardfehlerkanal ausgegeben) ins Nirwana um.

                          Die reguläre Ausgabe (auf den Standardausgabekanal) leiten wir mit

                          | FIND /I "EXAMPLE"

                          durch den Befehl FIND, der nur die Zeilen aus seiner Eingabe zurückgibt, die die Zeichenkette EXAMPLE (deinen Domänennamen) enthalten, wobei Groß- und Kleinschreibung keine rolle spielt (wegen /I).

                          Sie sind nur für den Überblick da, fall ich per Remote auf den PC zugreifen muss um Updates zu machen oder sowas.

                          Willst Du dem guten Benutzer einen Ausweichrechner vorschlagen?

                          Es ist wegen der Lizensvergabe bei Navision, wir haben eine begrenzte Anzahl. Navision Listet uns ja auch auf wer gerade da Rumkruschpelt und wann er das letzte mal was gemacht hat, dadurch das man nur den Computernamen gezeigt bekommt (der keine Namen oder änliche Erkennungsmerkmale enthält) brauchen wir den Anmeldenamen um die Person zu Kontaktieren und sie aufzufordern Navision evtl. zu schließen.

                          MfG Jonny F.

                          1. Hallo,

                            path\to\psloggedon.exe -l -x \PC_NAME 2>NUL | FIND /I "EXAMPLE"

                            nur die Zeile mit dem lokal angemeldeten Benutzer (ggf. den lokal angemeldeten Benutzern). Das Ergebnis läßt sich mit $programmiersprache leicht weiterverarbeiten :-)

                            also wenn ich jetzt

                            c:/temp/loggedon.exe -l \khbiwas 2>NUL | FIND /I "EXAMPLE"
                            in die kommandozeile eingebe müsste ich ein ergebnis bekommen oder wie.

                            wie wäre es mit Ausprobieren?

                            aber vielleicht ist folgende Einzeiler noch etwas cooler:

                            FOR /F "usebackq" %I IN (NET VIEW ^| FIND /I "\\") DO @ECHO %I && @path\to\psloggedon.exe -l -x %I 2>NUL | FIND /I "EXAMPLE" && @ECHO. || @ECHO.

                            liefert Dir eine Liste der für Dich "sichtbaren" Rechner, gefolgt von der Liste der lokal angemeldeten Benutzer, getrennt durch Leerzeilen.

                            Erläuterung:

                            NET VIEW

                            zeigt Dir eine Liste der über NetBIOS sichtbaren Rechner, ihrer Beschreibung (sofern angegeben) und mit einem Strich oberhalb und einer Erfolgsmeldung unterhalb

                            NET VIEW | FIND /I "\"

                            zeigt nur die Liste der Rechner sowie ihre Beschreibung an.
                            Für jeden Rechner, den Dir die Ausgabe dieses Befehls listet, möchtest Du Dein psloggedon-Kommando absetzen, kein großes Problem: dazu kann man FOR /F in Verbindung mit "usebackq" verwenden. Der Befehl muss in Backticks gesetzt werden (die Du vielleicht von MySQL her kennst). Weiter müssen wir beachten, dass die Pipe (|) maskiert werden muss. Maskierungszeichen ist das Caret-Zeichen ^. FOR nimmt standardmäßig nur den Beginn einer Zeile bis zum ersten Leerzeichen oder dem ersten Tabulatorzeichen. Damit entsorgen wir die Beschreibung.

                            Wir wollen mehrere Befehle ausführen, dazu verketten wir diese mit && und ||.
                            Bei
                                Befehl1 && Befehl2
                            wird Befehl2 nur ausgeführt, wenn Befehl1 erfolgreich ausgeführt wird.

                            Bei
                               Befehl1 || Befehl2
                            wird Befehl2 nur ausgeführt, wenn Befehl1 fehlschlägt.

                            ECHO %I
                                gibt den Rechnernamen aus (sollte immer erfolgreich sein)
                            &&
                            path\to\psloggedon.exe -l -x %I 2>NUL | FIND /I "EXAMPLE"
                                wird immer ausgeführt, gibt den angemeldeten Benutzer aus,
                                kann fehlschlagen
                            &&
                            ECHO.
                                gibt eine Leerzeile aus, wird nur ausgeführt,
                                wenn psloggedon.exe erfolgreich war
                            ||
                            ECHO.
                                gibt eine Leerzeile aus, wird nur ausgeführt,
                                wenn psloggedon.exe fehlschlug

                            Damit dürftest Du alle Daten haben, die Du für Deine Darstellung benötigst.
                            Daraus nettes HTML zu erzeugen, sollte nicht schwierig sein.

                            Korrekter wäre übrigens:
                                DSQUERY zu verwenden, um die Liste der Rechner zu erhalten
                                WMIC zu verwenden, um den angemeldeten Benutzer zu erhalten

                            dies erfordert jedoch die Angabe von Benutzernamen und Passwort, der dazu berechtigt ist, diese Anfragen abzusetzen.

                            Freundliche Grüße

                            Vinzenz

                            1. Also vielen dank schon mal,

                              die ausgabe funktioniert, aber wie kann ich sie jetzt an mein script senden

                              per net send oder net session oder wie kann ich das realisieren. Gibts es auch eine möglichkeit Daten von PHP in die Abfrage zu übertragen also in diesem Fall die Computernamen.

                              Fals du eine Link hast wo dies erklärt wird wäre ich dir sehr dankbar.

                              Naja nach so langer Zeit entlich mal ein erfolgserlebnis :D

                              MfG Jonny F.

                              1. Hab jetzt mal folgendes gemacht

                                ich habe mir jetzt eine Batch - Datei geschrieben nach deinen angaben

                                c:\temp\psloggedon.exe -l -x \%PCName% 2>NUL | FIND /I "Erbacher"

                                Nun will ich mir die variable so an PHP schicken
                                  
                                wget -O - --post-data 'action=bla&action2=123' http://bla.fhgw.de/test.php
                                Hier kommt aber schon die erste Fehlermeldung, wget kann nicht gefunden werden oder ist falsch geschrieben.

                                In PHP müsste ich es dann doch so behandeln oder
                                <?
                                $datei = fopen("test.txt","a++");
                                $text = "".$_REQUEST['action']." , ".$_REQUEST['action2']."";
                                fwrite($datei, $text);
                                fclose($datei);
                                ?>

                                ich hab auch noch was von
                                register_argc_argv
                                gelesen aber die soll ja veraltet sein

                                Wie setzte ich es jetzt am besten um

                                MfG Jonny F.

                                1. Hallo,

                                  ich habe mir jetzt eine Batch - Datei geschrieben nach deinen angaben
                                  Wie setzte ich es jetzt am besten um

                                  ich verstehe Dich doch richtig:

                                  a) Du hast einen Windows-Server
                                  b) Auf dem Windows-Server hast Du einen Webserver mit PHP-Unterstützung laufen.
                                  c) Du möchtest von einem x-beliebigen Rechner aus mit einem x-beliebigen Browser
                                     Deine Tabelle der Rechner und angemeldeten Benutzer erhalten.
                                  d) Eine nette hübsche HTA, die auf einem Netzlaufwerk liegt, kommt nicht in Frage

                                  Freundliche Grüße

                                  Vinzenz

                                  1. Hallo Vinzen,

                                    Also es funktioniert, ich kann es gar nicht glauben was man alles mit en bisschen googeln und kompetente Beraturung alles machen kann :D

                                    vielen Dank

                                    MfG Jonny F.

                                2. Hallo,

                                  ich habe mir jetzt eine Batch - Datei geschrieben nach deinen angaben
                                  c:\temp\psloggedon.exe -l -x \%PCName% 2>NUL | FIND /I "Erbacher"

                                  woher kommt die Variable PCName? Aus den Aufrufparametern? Nutze diese doch direkt. Aber ich frag' mich immer noch, wozu? Warum machst Du alles so kompliziert?

                                  Nun will ich mir die variable so an PHP schicken

                                  wget -O - --post-data 'action=bla&action2=123' http://bla.fhgw.de/test.php

                                  Wo läuft Dein apache mit PHP? Auf der Linuxkiste, deren Daten Du zu Anfang gepostet hast? Von wo aus willst Du Deine Abfrage starten?

                                  Nehmen wir an, Deine Webserver/PHP-Kombination läuft auf einer Windowsmaschine, die Domain heiße EXAMPLE und nehmen wir weiter an, psloggedon.exe sei im Verzeichnis

                                  D:\Program Files

                                  gespeichert, d.h. der Pfad zu psloggedon.exe sei

                                  D:\Program Files\psloggedon.exe

                                  In diesem Falle könntest Du an die Ausgabe in der Form

                                  \PC_1
                                      EXAMPLE\User1
                                  \PC_2
                                      EXAMPLE\User2
                                  \PC_3
                                  \MAINFRAME
                                      EXAMPLE\User1
                                      EXAMPLE\User7
                                      EXAMPLE\User22

                                  in Deinem PHP-Programm wie folgt kommen:

                                  // Baue Kommando zusammen  
                                  $pathToExe = 'D:\\Program Files\\psloggedon.exe';  
                                  $domain    = 'EXAMPLE';  
                                  $command   = 'FOR /F "usebackq" %I IN (`NET VIEW ^| FIND "\\\\"`) DO '  
                                      . '@ECHO %I & '  
                                      . '"' . $pathToExe . '"'  
                                      . ' -l -x %I 2>NUL | FIND '  
                                      . '"' . $domain . '\\"';  
                                  // Beachte: Dieses Kommando enthält keinerlei Zeichen mehr, die zusätzlich  
                                  //          maskiert werden müssen. Es darf *nicht* mit [link:http://de3.php.net/manual/de/function.escapeshellcmd.php@title=escapeshellcmd()]  
                                  //          behandelt werden.  
                                    
                                  // Führe Kommando aus  
                                  $output    = [link:http://de3.php.net/manual/de/function.shell-exec.php@title=shell_exec]($command);  
                                    
                                  // Debug-Ausgabe der Ausgabe des Kommandos:  
                                  echo [link:http://de3.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($output);  
                                  
                                  

                                  Die Ausgabe des Kommandos nun nett aufzubereiten, sei es in einer Tabelle, sei es in einer Liste, sollte Dir nicht mehr schwer fallen.

                                  Steht Dir Webserver/PHP ausschließlich auf der Linux-Kiste zur Verfügung, nähme ich an Deiner Stelle eine HTA.

                                  Freundliche Grüße

                                  Vinzenz

                                  1. Hallo,

                                    ich habe mir jetzt eine Batch - Datei geschrieben nach deinen angaben
                                    c:\temp\psloggedon.exe -l -x \%PCName% 2>NUL | FIND /I "Erbacher"

                                    woher kommt die Variable PCName? Aus den Aufrufparametern? Nutze diese doch direkt. Aber ich frag' mich immer noch, wozu? Warum machst Du alles so kompliziert?

                                    PCName habe ich als Eingabevariable genommen, damit habe ich es nur getestet. Ich hatte nun vor in dieser Variable die Computernamen aus der Datenbank zu speichern, da durch den ersten Teil des Codes auch Server ect. gefunden werden  kommt nach einer Zeit eine Fehlermeldung, daswegen möchte ich gezielt nach Computernamen suchen.

                                    Nun will ich mir die variable so an PHP schicken

                                    wget -O - --post-data 'action=bla&action2=123' http://bla.fhgw.de/test.php

                                    Wo läuft Dein apache mit PHP? Auf der Linuxkiste, deren Daten Du zu Anfang gepostet hast? Von wo aus willst Du Deine Abfrage starten?

                                    Ja genau, über die Linuxkiste :D möchte ich dieses Script starten, da auf der Kiste alle Scripts liegen.

                                    Die Abfrage soll von jeden ex-beliebigen PC aus dem Netzwerk gestartet werden können.

                                    Nehmen wir an, Deine Webserver/PHP-Kombination läuft auf einer Windowsmaschine, die Domain heiße EXAMPLE und nehmen wir weiter an, psloggedon.exe sei im Verzeichnis

                                    D:\Program Files

                                    gespeichert, d.h. der Pfad zu psloggedon.exe sei

                                    D:\Program Files\psloggedon.exe

                                    In diesem Falle könntest Du an die Ausgabe in der Form

                                    \PC_1
                                        EXAMPLE\User1
                                    \PC_2
                                        EXAMPLE\User2
                                    \PC_3
                                    \MAINFRAME
                                        EXAMPLE\User1
                                        EXAMPLE\User7
                                        EXAMPLE\User22

                                    in Deinem PHP-Programm wie folgt kommen:

                                    // Baue Kommando zusammen

                                    $pathToExe = 'D:\Program Files\psloggedon.exe';
                                    $domain    = 'EXAMPLE';
                                    $command   = 'FOR /F "usebackq" %I IN (NET VIEW ^| FIND "\\\\") DO '
                                        . '@ECHO %I & '
                                        . '"' . $pathToExe . '"'
                                        . ' -l -x %I 2>NUL | FIND '
                                        . '"' . $domain . '\"';
                                    // Beachte: Dieses Kommando enthält keinerlei Zeichen mehr, die zusätzlich
                                    //          maskiert werden müssen. Es darf nicht mit [link:http://de3.php.net/manual/de/function.escapeshellcmd.php@title=escapeshellcmd()]
                                    //          behandelt werden.

                                    // Führe Kommando aus
                                    $output    = link:http://de3.php.net/manual/de/function.shell-exec.php@title=shell_exec;

                                    // Debug-Ausgabe der Ausgabe des Kommandos:
                                    echo link:http://de3.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars;

                                    
                                    >   
                                    > Die Ausgabe des Kommandos nun nett aufzubereiten, sei es in einer Tabelle, sei es in einer Liste, sollte Dir nicht mehr schwer fallen.  
                                      
                                    Des ist dann kein Problem mehr :D  
                                      
                                    
                                    > Steht Dir Webserver/PHP ausschließlich auf der Linux-Kiste zur Verfügung, nähme ich an Deiner Stelle eine HTA.  
                                      
                                    Ja sie sind leider nur auf der Linux Kisten.  
                                      
                                    MfG Jonny F.
                                    
                                    1. Hallo,

                                      Steht Dir Webserver/PHP ausschließlich auf der Linux-Kiste zur Verfügung, nähme ich an Deiner Stelle eine HTA.

                                      Ja sie sind leider nur auf der Linux Kisten.

                                      dann rate ich Dir dringend zu einer HTA. Warum? Weil es viel einfacher ist, sie erfüllt das KISS-Prinzip:

                                      erledige alle Arbeitsschritte auf dem Rechner, auf dem sie erledigt werden können:

                                      Du musst aufgrund Deiner Randbedingungen auf dem Client ein Programm ausführen, dass die notwendigen Informationen sammelt. Statt diese umständlich an einen Server zu senden, der daraus eine Webseite erstellt, die Du im Client in einem zweiten Programm aufrufst, nimmst Du besser *ein* Programm, dass diese Informationen sammelt und direkt daraus die von Dir gewünschte Darstellung vornimmt. Eine HTA bietet sich dazu an. Die HTA und psloggedon.exe legst Du auf einer Freigabe Deines Fileservers ab und reduzierst somit auch den Pflegeaufwand.

                                      Warum HTA: hier kannst Du Deine Kenntnisse in HTML und Javascript (hier JScript) nutzen und kommst somit mit wenig Lernaufwand zum gewünschten Resultat.

                                      Übrigens: psloggedon.exe kann die Benutzer an Vista-Rechnern nicht ermitteln.

                                      Freundliche Grüße

                                      Vinzenz

                    2. DWORD nSize;
                      char user_name[255];
                      nSize = sizeof(user_name);
                      GetUserName(user_name, &nSize);

                      char com_name[255];
                      nSize = sizeof(com_name);
                      GetComputerName(com_name, &nSize);

                      cout<<"user: "<<user_name<<endl;
                      cout<<"computer: "<<com_name<<endl

                      des ist jetzt ein Prog das in C++ geschrieben wurde, wäre das ne möglichkeit wenn ja wie muss ich diese einbetten bzw. wo kann ich sie testn und aufrufen.

                      MfG Jonny F.

                2. //**********************************************************************
                  //
                  //  FUNCTION:     GetCurrentUserAndDomain - This function looks up
                  //                the user name and domain name for the user account
                  //                associated with the calling thread.
                  //
                  //  PARAMETERS:   szUser - a buffer that receives the user name
                  //                pcchUser - the size, in characters, of szUser
                  //                szDomain - a buffer that receives the domain name
                  //                pcchDomain - the size, in characters, of szDomain
                  //
                  //  RETURN VALUE: TRUE if the function succeeds. Otherwise, FALSE and
                  //                GetLastError() will return the failure reason.
                  //
                  //                If either of the supplied buffers are too small,
                  //                GetLastError() will return ERROR_INSUFFICIENT_BUFFER
                  //                and pcchUser and pcchDomain will be adjusted to
                  //                reflect the required buffer sizes.
                  //
                  //**********************************************************************

                  BOOL GetCurrentUserAndDomain(PTSTR szUser, PDWORD pcchUser,
                        PTSTR szDomain, PDWORD pcchDomain) {

                  BOOL         fSuccess = FALSE;
                     HANDLE       hToken   = NULL;
                     PTOKEN_USER  ptiUser  = NULL;
                     DWORD        cbti     = 0;
                     SID_NAME_USE snu;

                  __try {

                  // Get the calling thread's access token.
                        if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,
                              &hToken)) {

                  if (GetLastError() != ERROR_NO_TOKEN)
                              __leave;

                  // Retry against process token if no thread token exists.
                           if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY,
                                 &hToken))
                              __leave;
                        }

                  // Obtain the size of the user information in the token.
                        if (GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti)) {

                  // Call should have failed due to zero-length buffer.
                           __leave;

                  } else {

                  // Call should have failed due to zero-length buffer.
                           if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
                              __leave;
                        }

                  // Allocate buffer for user information in the token.
                        ptiUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbti);
                        if (!ptiUser)
                           __leave;

                  // Retrieve the user information from the token.
                        if (!GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti))
                           __leave;

                  // Retrieve user name and domain name based on user's SID.
                        if (!LookupAccountSid(NULL, ptiUser->User.Sid, szUser, pcchUser,
                              szDomain, pcchDomain, &snu))
                           __leave;

                  fSuccess = TRUE;

                  } __finally {

                  // Free resources.
                        if (hToken)
                           CloseHandle(hToken);

                  if (ptiUser)
                           HeapFree(GetProcessHeap(), 0, ptiUser);
                     }

                  return fSuccess;
                  }

                  Hab des Api dings hier grad gefunden, kann man vielleicht damit was anfangen.

                  MfG Jonny F.