1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. ahe

Beiträge von ahe

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 11. März 2009 um 14:40

    Eigentlich brauche ich nur den Namen als Rückgabewert, also silent.

    Was danach mit dem Wert geschieht hängt dann von der Anwendung ab... für's Logging, Verzeichnis mit dem Namen erstellen, Mail schicken, etc.

    Was ich alternativ jetzt mache ist, ich checke, ob jemand angemeldet ist (s. Postings zuvor) und lese außerdem die Registry aus:
    $RegUser = RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon", "DefaultUserName")

    Der Registry-Eintrag sollte ja dann dem des angemeldeten Users entsprechen :)
    Das ist zwar keine schöne, geradlinige Lösung, eher hintenrum', aber sie scheint zu funktionieren...

    mfg
    Axel

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 11. März 2009 um 14:08

    Hallo ctec,

    wie im Eingangsposting erwähnt, hatte ich das auch schon in Betracht gezogen. Bzgl. W2K bzw. nicht vorhandenem WMI wäre es vermutlich auch dass Beste.
    Allerdings ist es ein zusätzliches Tool, die Ausgabe ist eine Liste (die gleiche übrigens wie bei meiner und Bugfix' Lösung gestern Abend) und diese Liste kann
    auch in unterschiedlichen Sprachen sein, je nach dem in welcher Sprache XP installiert wurde.

    Diese Liste muss noch gefiltert werden, um dann den wirklich angemeldeten Anwender herauszubekommen.

    D. h. die eigentliche Arbeit beginnt dann erst :)

    mfg
    Axel

    P.S.: Je nach dem, welche Version Du von PSLOGGEDON du verwendest, muss erst ein Registryeintrag für den aufrufenden Anwender erstellt werden, da ansonsten ein Dialog erscheint. Bei älteren Versionen gab es zudem noch einen weiteren Parameter

    Code
    psloggedon.exe /?
    
    
    PsLoggedOn v1.31 - Logon Session Displayer
    Copyright (C) 1999-2003 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    
    Usage: psloggedon.exe [-l] [-d domain] [-x] [\\computername]
    	or psloggedon.exe [username]
    -l 	Show only local logons
    -d 	Search the specified domain
    -x 	Don't show logon times
    Alles anzeigen

    Bei der folgenden (aktuelleren) Version ist der Registryeintrag zuvor nötig, um es silent einsetzen zu können:
    HKCU\Software\Sysinternals\loggedon
    EulaAccepted=1

    Code
    psloggedon.exe /?
    
    
    loggedon v1.33 - See who's logged on
    Copyright ⌐ 2000-2006 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    
    Usage: psloggedon.exe [-l] [-x] [\\computername]
    	or psloggedon.exe [username]
    -l 	Show only local logons
    -x 	Don't show logon times
    Alles anzeigen
  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 11. März 2009 um 11:33

    Da es mir in erster LInie reicht zu wissen, ob jemand angemeldet ist, kann ich auch genauso gut auf den Prozess Explorer.exe abprüfen.
    Die Explorer.exe ist ja nur dann gestartet, wenn jemand angemeldet ist... (es sei denn es hat jemand die Shell manuell auf etwas Anderes geändert, ist mir aber seit Windows 3.11 nicht mehr untergekommen, wenn man 'mal von WinPE absieht...)

    [autoit]

    $loggegInUser = LoggedOnUser()
    if $loggegInUser = 0 Then
    MsgBox(0,"jetzt gehts los","reboot")
    Else
    MsgBox(0,"jetzt gehts los","kein reboot")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Func LoggedOnUser()
    $PID = ProcessExists("explorer.exe") ; Will return the PID or 0 if the process isn't found.
    If $PID Then
    MsgBox(0,"Running Explorer", "User is logged in " & $PID)
    return 1
    Else
    MsgBox(0,"No running Explorer", "No user is logged in " & $PID)
    return 0
    EndIf
    EndFunc

    [/autoit]


    (die doppelten MsgBoxen dienen nur zur Verwirrung... :) )

    Schön wäre es allerdings doch, den Namen des angemeldeten Anwenders zu erfahren...

    Vielleicht hat ja jemand in einer ruhigen Minute den Nerv dazu...

    mfg
    Axel

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 11. März 2009 um 00:21

    Danke Bugfix,

    funktioniert die Scriptomatic für AutoIt wieder? Oder gibt es eine neue Version?

    Zum Skript:
    Das ist doch im Prinzip das Gleiche, wie bei mir, nur gibst Du noch zusätzlich die LoginID des jeweiligen Accounts aus und zeigst sie paarweise an.
    (Ich hab' sie alle zusammengeklatscht...)

    Ich vermute die LoginID's sind von Rechner zu Rechner (oder sogar von Tag zu Tag?) verschieden... eventuell läßt sich ja etwas über den LogonType ermitteln, habe hier http://www.tek-tips.com/viewthread.cfm?qid=1308179&page=2 und hier http://www.mombu.com/microsoft/scri…ge2-186170.html etwas dazu gefunden...

    Aber jetzt ist es mir zu spät...

    mfg
    Axel

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 10. März 2009 um 23:26

    Danke Xeno,

    die Idee zum Aufsplitten kann ich in einem anderen Skript gebrauchen ... :)

    Leider mußte ich feststellen, dass die Klasse Win32_ComputerSystem mir hier nicht weiterhilft.
    Jedes Mal, wenn ich das Skript per runas oder aber direkt als local system aufrufe, erhalte ich nur den "Anmeldenamen" des Aufrufers, also den Administrator bzw. SYSTEM. Nicht aber den Namen des eingeloggten Benutzers.

    Beim Testen habe ich einen Fehler gemacht. Der Parameter $strComputer = "computer_ahe1" beinhaltet einen Remote Computer auf dem ich Rechte hatte, daher konnte ich mit Hilfe meines Accounts die Auswertung durchführen. Der lokale Admin bzw. auch Local System sehen nur sich selbst über die Klasse...

    Ich habe dies erst bemerkt, als ich das Skript bei mir als Local System gestartet habe und kein Ergebnis erhielt, obwohl ich angemeldet war...

    Den Test als Local System führt man durch, in dem man als Admin per AT-Job eine Command-Shell aufruft:
    AT <hh:mm> /interactive cmd

    Eine Alternative habe ich allerdings inzwischen gefunden mit Hilfe der Klasse Win32_LoggedOnUser, nur weiss ich noch nicht, wie ich da den gültigen Account herausfiltern kann...

    VBS-Variante:
    zeigt alle eingrichteten Accounts an, Administrator, Network Service, Local SERVICE, System, Anonymous LOGON, __vmware... (falls VMWare installiert ist) und den angemeldeten Benutzer samt Domäne...

    Code
    strComputer = "."
    strList = ""
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LoggedOnUser",,48)
    For Each objItem in colItems
      strList = strList & objItem.Antecedent & Chr(13)
    Next
    Wscript.Echo strList

    AutoIT-Variante:

    [autoit]


    $strComputer = "."
    $string=""
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    if @error then
    Msgbox (0,"WMI_Test","Error Getting an WMI Object. Error code: " & hex(@error,8))
    exit
    endif
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LoggedOnUser")
    For $objItem in $colItems
    $string = $string & $objItem.Antecedent & @CRLF
    Next
    MsgBox(0,"Test", "Logged-on user on: " & $strComputer & @CRLF & $string)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Jetzt muss ich "nur" noch einen Filter auf Administrator und die Domänen-Kennung in der Zeile des User machen und schon sollte ich wissen, ob ein User angemeldet ist... das Filtern scheint dann doch etwas kniffliger zu sein, damit kämpfe ich noch...

    mfg
    Axel

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 10. März 2009 um 17:20

    Danke für die Antwort.

    Nun der Installations-Prozess läuft als "Local System", d. h. der lokale Administrator ist in diesem Moment auch nur ein User...

    Der Installations-Prozess muss prüfen, ob ein Anwender angemeldet ist, ob dass jetzt der lokale Administrator, ein lokal angelegter User oder ein Domain-User ist, ist dabei vollkommen egal.
    Mir geht es darum, dass nicht ein reboot gemacht werden soll, wenn jemand angemeldet ist.

    mfg
    Axel

  • Feststellen ob ein Anwender angemeldet ist

    • ahe
    • 10. März 2009 um 17:09

    Hallo,

    ich habe das Problem, dass ich mit dem SYSTEM-Account feststellen muss, ob ein Anwender angemeldet ist oder nicht.
    Wenn er angemeldet ist, darf ich nach einer Installation nämlich den Rechenr nicht durchstarten... :)

    Mit dem folgenden Befehl erhalte ich zwar einen Usernamen, allerdings muss dies nicht heißen, dass der gerade angemeldet ist, sondern, dass er der letzte angemeldete User war.
    $RegUser = RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon", "DefaultUserName")
    ( s. a. [ gelöst ] Angemeldeten User anzeigen?)

    Erst bei einer erneuten Anmeldung wird der Wert überschrieben... er wird nicht beim Abmelden gelöscht (leider 8| )

    Jetzt hatte ich die Idee mit den folgenden Zeilen das Problem zu fixen, doch...

    Code
    $objNetwork = ObjCreate("WScript.Network")
    Global $loggegInUser = $objNetwork.UserName
    if $loggegInUser = "SYSTEM" then ... shutdown(6)


    nun wird natürlich automatisch ein Reboot gemacht, da der ausführende User in diesem Fall "SYSTEM" ist (kleiner Denkfehler... :rolleyes: )

    Nun gibt es noch das Tool psloggedon.exe von Sysinternals/MS, allerdings muss ich mich da erst durch die Resultatsliste wühlen, die auch noch in verschiedenen Sprachen sein kann...
    Außerdem ist es ein weiteres Tool welches eingebunden werden muss und dass ggfs. beim Betriebsrat und den Security-Zuständigen nicht so beliebt ist... :sleeping:

    Jetzt habe ich 'mal ein wenig gesucht und eine VBS Version gefunden und versucht diese umzusetzen:
    Die VBS Variante:

    Code
    strComputer = "computer_ahe1"
    Set objWMIService = GetObject("winmgmts:" & "\\" & strComputer & "\root\cimv2") 
    
    
    Set colComputer = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
     
    For Each objComputer In colComputer
    	WScript.Echo "Logged-on user: " & objComputer.UserName
    Next


    Die AutoIt Variante:

    Code
    $strComputer = "computer_ahe1"
    $objWMIService = ObjGet("winmgmts:" & "\\" & $strComputer & "\root\cimv2") 
    
    
    $colComputer = $objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
     
    For $objComputer In $colComputer
    	MsgBox(0,"Test", "Logged-on user: " & $objComputer.UserName & " on: " & $strComputer)
    Next

    Eigentlich wollte ich ja jetzt die Frage stellen, wie es geht, aber jetzt, da es so aussieht als wenn es funktioniert frage ich eher, gibt es eine geschicktere Lösung? :)

    mfg
    Axel

  • Manage USB-Drives per devcon.exe

    • ahe
    • 16. Februar 2009 um 12:10

    Hallo,

    ich bekomme leider auch eine Fehlermeldung (OS=Windows XP SP3, MUL):

    Aufruf aus SciTE (V1.76):

    [autoit]

    >Running:(3.2.12.1):C:\Program Files\AutoIt3\autoit3.exe "D:\Scripts\ManageUSB.au3"
    D:\Scripts\ManageUSB.au3 (138) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $tmp = StringSplit($tmp[2], @LF)
    $tmp = StringSplit(^ ERROR
    ->12:01:06 AutoIT3.exe ended.rc:1
    >Exit code: 1 Time: 2.065

    [/autoit]

    Nach dem compilieren:
    Es erscheint das Fenster "Manage USB-Drive" allerdings auch eine Fehlermeldung:
    "AutoIt Error"
    Line -1:
    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.

    mfg
    Axel

  • Hidden/Silent/versteckte Installation mit Progress

    • ahe
    • 8. Dezember 2008 um 15:49

    Klar, nicht jede Anwendung wird durch (diese Version) vom Wise-Installer installiert, aber es gibt inzwischen doch bei fast jeder Anwendung einen "Silent"-Schalter, den man verwenden kann. Es muss also nicht "/S" sein, häufig ist es auch -S, /silent, -silent, /q, ... Man muss 'halt schaun, welchen Parameter man braucht... (s. angegebene Links... :-))

    Falls man jetzt eine allgemeingültige Anwendung zum Starten von Installationen machen möchte, so könnte man auch die Anwendung und den zugehörigen Parameter aus einer INI (oder anderen Textdatei) auslesen und als Kommandozeile ausführen...

    (Funktioniert Install-O-Matic nicht ähnlich?)

    mfg
    Axel

  • Hidden/Silent/versteckte Installation mit Progress

    • ahe
    • 8. Dezember 2008 um 14:57

    Hallo,

    warum versuchst Du es nicht mit den Installationsparametern vom Firefox Installer (Wise)?

    setup.exe /S


    s. a. hier: http://wiki.mozilla.org/Installer:Command_Line_Arguments

    und hier: http://www.appdeploy.com/packages/detail.asp?id=1286

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 12. September 2008 um 09:46

    Hallo progandy,

    heißt das dann, dass %SystemDrive% beim Aufruf meiner EXE ggfs. gar nicht aufgelöst wird und damit die EXE nicht gefunden wird?

    Mmh, kurze Antwort: Ja, habe es jetzt ausprobiert, bevor ich die Frage abschickte...

    Nur wenn ich z. B. einen Aufruf mit Run(@ComSpec & " /c " & 'commandName'... machen würde, könnte ich in den Parametern zum "Command" die OS Umgebungsvariable nutzen.

    Also werde ich wohl Deine Funktion verwenden (wenn ich die Funktion verstanden habe) oder bei Oscars Workaround bleiben... denke ich 'mal drüber nach...
    (habe gerade die Info erhalten, dass ggfs. meine Pakete auch unter XP 64 Bit laufen sollen, ;( da müßte ich dann wohl noch ein paar checks einfügen, STÖHN...)

    Danke.
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 11. September 2008 um 18:54

    Danke progandy,

    ich habe zwar nicht Alles verstanden (die Funktion _WinAPI_DoEnvironmentSubst($sString) ist mir noch ein Rätsel), aber diese Registryeinträge habe ich eigentlich gesucht... :D

    Könnte dies dann nicht auch reichen:

    [autoit]


    MsgBox(0, "der pfad: ", RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory") _
    & "\" & RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","DefaultUserProfile"))

    [/autoit]


    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 11. September 2008 um 14:41

    Hallo Oscar,

    habe ich eigentlich das Script an den richtigen Ort kopiert? Ich hatte nur "Installationsskripte" gelesen (den Titel IOM 3 habe ich wohl "ignoriert")... oder kommt es zu "AutoIt - Skripte"...

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 11. September 2008 um 13:12

    Hallo RR04,

    es geht nicht darum, dass ich das Script nicht ausführen kann. Es ging mir einfach darum etwas in das "Default User" Profle zu kopieren. Einstellungen, Dateien, etc. an diesem Profile werden bei der Anmeldung in das Anwenderprofile kopiert!

    Jetzt ist es aber sprachabhängig, wo die Profiles gespeichert werden, daher mußte ich den Pfad ermitteln. Da es weder bei MS eine Umgebungsvariable noch bei AutoIt ein Makro dafür gibt, hatte ich mir eine Funktion gebastelt.
    Oscar hat das dann auf eine Zeile "reduziert" :)

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 11. September 2008 um 11:50

    Hallo RR04,

    danke Dir, allerdings zeigt mir der Parameter @UserProfileDir das Profile des angemeldeten Benutzers, nicht aber das Verzeichnis des Default Users.

    Die Lösung von Oscar funktioniert und habe ich inzwischen in mein Skript eingebaut (s. Link im letzten Post)

    Kleine Übersicht über die Parameter:

    [autoit]

    $systempathes= "@StartMenuCommonDir: " &@TAB & @StartMenuCommonDir & @CRLF _
    & "@AppDataCommonDir: " &@TAB & @AppDataCommonDir & @CRLF _
    & "@AppDataDir: " &@TAB&@TAB& @AppDataDir & @CRLF _
    & "@CommonFilesDir: " &@TAB&@TAB& @CommonFilesDir & @CRLF _
    & "@UserProfileDir:" &@TAB&@TAB& @UserProfileDir _

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "Diverse Pfade...", $systempathes)

    [/autoit]

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 11. September 2008 um 11:23

    Hallo,

    falls jemand neugierig auf das QuickTime Paket geworden ist, es liegt hier http://www.autoit.de/index.php?page=Thread&postID=58030#post58030

    mfg
    Axel

  • Apple QuickTime 7.5.5

    • ahe
    • 11. September 2008 um 11:20

    Hallo,

    dies ist ein erster Versuch QuickTime 7.5.5 mit Hilfe eines AutoIt Skripts zu installieren und löst damit meine alte Batch ab...

    Anmerkung:
    Wir nutzen LANDesk zur Softwareverteilung. Damit wir immer genau wissen, wo unsere Installationen sich gerade aufhalten senden wir Nachrichten mit Hilfe der Funktion LDEcho.
    In dieser Funktion wird eine Logdatei geschrieben und zusätzlich entweder ein Splash-Screen gezeigt (falls das Paket manuell aufgerufen wird), oder eine Nachricht an LANDesk gesendet (wenn zuvor getestet wurde, ob der zuständige Verteildienst läuft...).

    Ich denke es gibt noch genug zu optimieren, vielleicht mache ich es auch furchtbar umständlich, daher bin ich für jedwede konstruktive Kritik offen.
    Ein Dank geht schon 'mal an OSCAR, der mir beim Default User Pfad zu einem Einzeiler verhalf...


    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 10. September 2008 um 23:40

    Hallo Oscar

    danke, das ist auf jeden Fall eine deutlich kürzere und schnellere Lösung... :)

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 10. September 2008 um 22:37

    Hallo Tweaky,

    das hatte ich zuerst auch gedacht, allerdings verweist das auf das "All Users" Verzeichnis (s. Codebeispiel) ... :rolleyes:

    Code
    $systempathes= "@StartMenuCommonDir: " &@TAB & @StartMenuCommonDir & @CRLF _ 
    				& "@AppDataCommonDir: " &@TAB & @AppDataCommonDir & @CRLF _ 
    				& "@AppDataDir: " &@TAB&@TAB& @AppDataDir & @CRLF _
    				& "@CommonFilesDir: " &@TAB&@TAB& @CommonFilesDir _
    
    
    MsgBox(0, "Diverse Pfade...", $systempathes)

    mfg
    Axel

  • Pfad zum "Default User" Profile finden

    • ahe
    • 10. September 2008 um 21:47

    Hallo,

    ich mache mir gerade ein Installationsscript für QuickTime 7.5.5. Dabei muss eine Datei in das Verzeichnis

    Code
    %SystemDrive%\Documents and Settings\Default User\Application Data\Apple Computer\QuickTime\


    kopiert werden. Wobei der Pfad-Teil "Documents and Settings" sprachabhängig ist (d. h. von der installierten XP Basissprache abhängt)

    Leider gibt es anscheinend kein Makro für den Default User bzw. dessen Pfade, daher habe ich mir eine Funktion geschrieben:

    Code
    $test=_CheckDefUserPath ()& "Apple Computer\QuickTime\"
    MsgBox(0, "Default User path...", $test)
    
    
    Func _CheckDefUserPath ()
    	$regkey="HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
    	$searchstr="PrintHood"
    
    
    	$DefUser_reg=RegRead($regkey, $searchstr)
    	$DefUser_path=StringTrimRight($DefUser_reg, StringLen($searchstr))
    	Return $DefUser_path
    EndFunc
    Alles anzeigen

    Ich denke, dass es da sicher noch etwas Optimierungspotenzial gibt... :rolleyes: oder einen anderen, geschickteren Weg (der Check auf "PrintHood" gefällt mir persönlich nicht so sehr...)

    mfg
    Axel

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™