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. Hector

Beiträge von Hector

  • 1D Array in 2D Array schreiben

    • Hector
    • 4. April 2018 um 16:17

    Okay, also mit "_stringBetween" hat es dann auch funktioniert.

    Habe es noch ein kleines bissschen angepasst und @error Handler hinzugefügt.

    Vielen Dank für die schnelle Hilfe!

    War schon am verzweifeln und darauf wäre ich nicht gekommen.

    Werde es mal selber nachbauen, um ganz dahinter zu steigen ;)

    Gruß

    Christoph

  • 1D Array in 2D Array schreiben

    • Hector
    • 4. April 2018 um 14:16

    AH okay,

    Danke für Deine Hilfe.

    Ich probiere noch mal etwas rum und wenn alles erledigt ist, schließe ich das hier.

    Wenn nicht, werde ich weiter Fragen :)

    Vielen Dank nochmal!

  • 1D Array in 2D Array schreiben

    • Hector
    • 4. April 2018 um 14:03

    Okay, dies ist ein ganz anderer Weg wie ich erst vor hatte, aber er funktioniert.

    Schon mal vielen Dank für den Gedankenanstoß.

    Habe deinen Script meinen Anforderung angepasst. Läuft soweit.

    Das Ergebnis und da habe ich eine nicht ausreichende Information gegeben, ist leider nicht korrekt.

    In $a2DArray brauche ich Strings, und nicht nur Zahlen.

    Momentan werden meine Strngs herausgelöscht, so wie mir scheint.

    Sorry, mein Fehler

  • 1D Array in 2D Array schreiben

    • Hector
    • 4. April 2018 um 10:19

    Hi Zusammen,

    ich brauche mal wieder Eure Hilfe, sonst werde ich hier noch wahnsinnig.

    Ich lese ein Config File mit FileReadLine aus und lese danach die Informationen zwischen eckigen Klammer [ ] mittels _StringBetween aus

    Das Ergebnis wäre dann ein Array mit 5 Reihen und je Reihe eine Information:

    Config File (TXT):

    Zeile 1 - [11] [12] [13] [14] [15]

    Zeile 2 - [21] [22] [23] [24] [25]

    Zeile 3 - [31] [32] [33] [34] [35]

    Zeile 4 - [41] [42] [43] [44] [45]

    Zeile 5 - [51] [52] [53] [54] [55]

    AutoIt
    Local $ReadLine_string = FileReadLine($openConfigFile, $iReadConfigLine)
    
    $aReadLine = _StringBetween($ReadLine_string, "[", "]", $STR_ENDNOTSTART)

    Ich bekomme dann ein 1D Array raus:

    Row Col0
    Row0 11
    Row1 12
    Row2 13
    Row3 14
    Row4 15

    Das ganze passiert dank eine While Schleife 11 mal.

    nun habe ich in Jedem Durchgang 1 Array mit 5 Zeilen in Spalte "0"

    Nach jedem Vorgang möchteich die Zeile "0" des 1D Arrays in eine Spalte eines 2D Arrays schreiben, damit ich am Ende der Schleife ein 2D Array habe mit 5 Zeilen und 11 Spalten.

    In Spalte 0 die Infos aus dem 1D Array aus Durchgang 1

    in Spalte 1 die Infos aus dem 1D Array des Durchgang 2

    etc..

    Row Col0 Col1 Col2 Col3 Col4
    Row0 11 21 31 41 51
    Row1 12 22 32 42 52
    Row2 13 23 33 43 53
    Row3 14 24 34 44 54
    Row4 15 25 35 45 55

    Ich hoffe, ich habe es soweit gut erklärt.

    Ich suche jetzt schon seit ein paar Tagen und habe mich an diversen Funktionen Versucht. Leider immer ohne Erfolg.

    Hoffe Ihr könnt helfen.

    Gruß

    Chris

  • _IELoadWait Fehler mit Intranet Webseite

    • Hector
    • 12. Oktober 2016 um 17:34

    Hi zusammen,

    ich konnte ein Workaround finden und hoffe, es hilft ggf jemandem, der das gleiche Problem hat
    Der Script sieht wie folgt aus:

    AutoIt
    #include <IE.au3>
    Global $GUIIcon = @ScriptDir & "\ICONNAME.ico" ;Set path for the Icon for all GUI's
       ;Internet Explorer (http://Intranet.firma.com) test
       $oIE_Intranet = _IECreateEmbedded ()
    	  $hGUI_Intranet = GUICreate("Intranet Loading Time Test", 1280, 720, -1,-1, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    	  $GUIActiveX = GUICtrlCreateObj($oIE_Intranet, 0, 0, 1280, 720)
    	  GUISetIcon($GUIIcon)
    	  GUISetState()       ;Show GUI
    	  $timer = TimerInit ()
    	  _IENavigate ($oIE_Intranet, "http://Intranet.firma.com")
    	        Local $IEStartTimeIntranet = Round (TimerDiff ($timer)/1000,0) ;Calculate IEStartTimeIntranet from Milliseconds to Seconds
       GUIDelete($hGUI_Intranet)
     Sleep(500)
    Alles anzeigen


    Hat mich nun viel nerven gekostet, aber so kann man die Ladezeit der Website messen :part::party:

    Anfrage hat sich damit erledigt :)
    Danke an alle, für eure Hilfe und Tipps!

    Grüße
    Hector

  • _IELoadWait Fehler mit Intranet Webseite

    • Hector
    • 20. September 2016 um 13:47

    Hi zusammen, sorry für die späte Antwort. Musste mich um andere Themen kümmern.

    Ich habe den Parameter angepasst (_IENavigate($oIE,"http://intranet.firma.de",1)), aber leider ohne Erfolg.
    Bekomme den Fehler "--> IE.au3 T3.0-2 Warning from function _IEAttach, $_IESTATUS_NoMatch" und es wird keine Zeit gemessen.
    Bekomme nur 0 oder 1 Sekunde raus.

    Gibt es vielleicht einen ganz anderen Weg?

  • _IELoadWait Fehler mit Intranet Webseite

    • Hector
    • 9. September 2016 um 09:22

    nene, habe mich falsch ausgedrückt.. also nicht weitergeleitet.. die Seite wurde eben geladen. ;) nicht weitergeleitet
    Also alles so wie es soll, nur eben leider das der Counter und nicht geht und ich diese tollen Fehlermeldungen bekomme.. ;(

    Gibt es noch andere Möglichkeiten, die Ladezeit zu messen? z.B. die Netzwerkauslastung des Prozesses zu messen und dann bei "idle" zu stoppen?

  • _IELoadWait Fehler mit Intranet Webseite

    • Hector
    • 8. September 2016 um 15:08

    Hi Kanashius,

    danke für deine schnelle Antwort.

    Ich habe es mal direkt ausprobiert, aber leider erzielt es nicht den gewünschten Effekt :(
    Er macht zwar genau das, was er soll, allerdings öffnet er mir direkt nach dem Öffnen des IE die MsgBox mit der Info "Needed Time 0.03"
    Im Hintergrund sehe ich dann, wie der Internet Explorer auf die gewünschte Intranet Seite weitergeleitet wird.

    Bekomme auch eine Meldung in der Konsole:

    --> IE.au3 T3.0-2 Warning from function _IEAttach, $_IESTATUS_NoMatch

    Kannst du damit etwas anfangen?

  • _IELoadWait Fehler mit Intranet Webseite

    • Hector
    • 8. September 2016 um 11:45

    Hi zusammen,


    ich muss mich mal wieder mit einem Problem an euch wenden.
    In einem Script für unser Unternehmen, möchte ich gerne die Zeit messen, die unsere Intranet Seite zum laden braucht.
    Ich hatte dies bisher so gelöst:

    AutoIt
    #include <IE.au3>
       ;Internet Explorer (%IntranetWebAddress%) test
       if ProcessExists("iexplore.exe") then  ProcessClose("iexplore.exe") ;Close Internet Explorer and start again. Measure Time to open Website: %IntranetWebAddress%
    	  Sleep(50)
       if ProcessExists("iexplore.exe *32") then  ProcessClose("iexplore.exe *32")
    	  $timer = TimerInit ()
    		 Local $oIE_Intranet = _IECreate("%IntranetWebAddress%")
    		 _IELoadWait($oIE_Intranet)
    	  Local $IEStartTimeIntranet = Round (TimerDiff ($timer)/1000,0) ;Calculate IEStartTimeIntranet from Milliseconds to Seconds
    	  Sleep(1000)
       _IEQuit($oIE_Intranet)
    Alles anzeigen


    Ich bekomme folgenden Fehler in der Konsole:

    Console Error:
    -->IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_ClientDisconnected(-2147417848, Browser has been deleted prior to operation.)
    -->IE.au3 T3.0-2 Error from function _IELoadWait, $_IESTATUS_InvalidObjectType ()

    Das hatte auch anfangs super funktioniert, bis ich "#RequireAdmin" entfernen musste, da unsere User keine AdminRechte haben.
    Auf diesen Fehler wird selbst auf den offiziellen Seiten hingewiesen und "Workarounds" angeboten:
    Quelle: https://autoit.de/onlinehilfe/libfunctions/_IECreate.htm

    Wenn der Browser eine URL laden soll, die in einer anderen Sicherheitszone liegt, wird in Windows Vista wird ein neues Browser Fenster erstellt. Dies erhöht die Sicherheit. Dies geschieht auch bei dem ersten erstellen und wenn die Seite durch _IECreate erstellt wurde. Das neue Fenster ist eine neue Browser Instanz und vorherige Browser Instanzen haben keinen Bezug mehr darauf.
    Es gibt verschiedene Möglichkeiten dies zu umgehen:
    1) Es kann #RequireAdmin in dem Code hinzugefügt werden (dies ist notwendig, wenn der Account ein Teil der Administratorgruppe ist und zeigt an, dass notwendige Referenzen verfügbar sind).
    2) Es kann _IEAttach verwendet werden um es an ein neues Browser Fenster anzuhängen.
    3) Es kann die Zielwebseite zu der vertrauten Sicherheitszone im Internet Explorer hinzugefügt werden.
    4) Es kann der "geschützte Modus" im Internet Explorer abgeschaltet werden.
    5) Es kann die Benutzerkontensteuerung (UAC) abgeschaltet werden. Jedoch muss man sich im Klaren sein, was es bedeutet, wenn man die Sicherheitsfeatures des Internet Explorers abschaltet, wenn man ungeschützte Seiten besucht.

    Zu 1) #RequireAdmin kann leider nicht angewendet werden
    Zu 2) Ich habe schon versucht es mit _IEAttach zu lösen, aber ich verstehe leider nicht, wie das damit funktionieren soll. Ich habe auch bisher keine Tutorial oder so gefunden :(
    Zu 3) Leider IT-Seitig nicht so ohne weiteres möglich. Wäre glaube ich mehr Aufwand, als eine Alternative (3rd Level Support in UK)
    Zu 4) ist bereits deaktiviert
    Zu 5) Lieber nicht ;)

    Vielleicht gibt es ja auch eine ganz andere Möglichkeit, die mir nicht einfällt. Mehrere Gehirne denken ja bekanntlicher Weise besser als eins ;)

    Was brauche ich:
    Unsere Intranet Website muss in IE gestartet werden (auch gerne mit Umwegen) und es muss irgendwie die Zeit gemessen werden, bis die Website komplett geladen ist.

    Klingt einfach, ist es aber (zumindest für mich) nicht. Problem ist eben, das die Website in den Internet Optionen unter Sicherheit in der Gruppe "lokales Intranet" eingetragen ist.

    Mir ist jetzt gerade eingefallen ob es möglich ist, die Netzwerklast eines Prozesses (iexplorer.exe) zu überwachen. Wenn dies auf Null geht, "Stoppuhr anhalten".

    Wäre wieder für jeden Tipp dankbar!

    Grüße
    Hector

  • Computer Startuptime auslesen und in Array schreiben

    • Hector
    • 5. September 2016 um 14:45

    Wow, danke für die Antwort. War im Urlaub, deswegen antworte ich jetzt erst.
    Schaut interessant aus, leider konnte ich den Script auf die Schnelle nicht zum laufen kriegen (habe auch mit WMI noch nicht gearbeitet)

    Was liest der Script denn genau aus`? wie lange der Computer läuft, oder wie lange der tatsächliche start des Computers gedauert hat`? Also von "On/Off" drücken bis Login Screen / Desktop?

  • Computer Startuptime auslesen und in Array schreiben

    • Hector
    • 17. August 2016 um 13:29

    Hi Zusammen,

    ich weiß, kein leichtes Thema. Konnte dies aber nun mit einem Workaround "lösen":

    Ich starte den Skript ohne #RequireAdmin und ohne lokale Adminrechte.
    zuerst starte ich eine GUI, welche nach dem Passwort des lokalen Administrators fragt (sollte jeder ITler des Unternehmen / Privatperson kennen)
    Wenn man "Abbrechen" klickt oder das Fenster schließen will wird gewarnt, das Admin Berechtigungen benötigt werden und der PS Script nicht ohne läuft und das man es erneut versuchen soll.
    Mit "Ja", kommt man zurück zur Eingabe, mit "Nein" schließt sich das Fenster und es geht zur nächsten Funktion (Powershell wird übersprungen)

    In der nächsten Funktion wird der PS Script als Admin ausgeführt und das vorher eingegebene Passwort eingegeben.

    AutoIt
    #include <Constants.au3>
    #include <GuiConstants.au3>
    #include <EditConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <ButtonConstants.au3>
    
    
    GUI()
    PS()
    
    
    Func GUI()
       GUICREATE("Please enter Password", 350, 110)
       GUICTRLCREATELABEL("Please enter the Password of the local Administrator", 15, 10)
       $tPassword=GUICTRLCREATEINPUT("", 15, 30, 320, -1, 0x0020)
       $tCancel=GUICTRLCREATEBUTTON("Cancel", 245, 65, 75)
       $tLogin=GUICTRLCREATEBUTTON("Login", 35, 65, 75)
       GUISETSTATE()
       GUICTRLSETSTATE($tLogin, $GUI_DEFBUTTON)
    WHILE 1
        $msg=GUIGETMSG()
            IF $msg=$GUI_EVENT_CLOSE THEN
                $PS_AdminCredentials = MsgBox (4, "Admin Password missing", "Local Administrator previledges are required, to extract the boot information with Windows Powershell. Please try again.", 30)
    			   If $PS_AdminCredentials = 7 Then
    				  GUISETSTATE(@SW_HIDE)
    				  "NextFunction/Skip PS"()
    			   Else
    				  ;do nothing
    			   EndIf
            ELSEIF $msg=$tCancel THEN
                $PS_AdminCredentials = MsgBox (4, "Admin Password missing", "Local Administrator previledges are required, to extract the boot information with Windows Powershell. Please try again.", 30)
    			   If $PS_AdminCredentials = 7 Then
    				  GUISETSTATE(@SW_HIDE)
    				  "NextFunction/Skip PS"()
    			   Else
    				  ;do nothing
    			   EndIf
            ELSEIF $msg=$tLogin THEN
    			   Global $AdminUserPassword = GUICTRLREAD($tPassword)
    		 GUISETSTATE(@SW_HIDE)
                    EXITLOOP
            ENDIF
    WEND
    EndFunc ;==> GUI
    
    
    Func PS()
    $PSScript_BootTime = "Script Path\ExtractBootTimes.ps1"
    RunAs("Administrator", @ComputerName, $AdminUserPassword, 0,"powershell.exe -ExecutionPolicy Bypass -Command " & $PSScript_BootTime)
    EndFunc ;==> PS
    Alles anzeigen

    Anbei noch der PS Script

    Code
    Powershell Script
    
    
    $Event = Get-WinEvent -FilterHashTable @{LogName = "Microsoft-Windows-Diagnostics-Performance/Operational"; ID=100} -MaxEvents 1
    $eventXML = [xml]$Event.ToXml()
    $BootStartTime = $eventXML.Event.EventData.Data[1].'#text'
    $BootEndTime = $eventXML.Event.EventData.Data[2].'#text'
    $BootTimeMS = $eventXML.Event.EventData.Data[5].'#text'
    $MainPathBootTimeMS = $eventXML.Event.EventData.Data[6].'#text'
    $BootPostBootTimeMS = $eventXML.Event.EventData.Data[19].'#text'
    $Logpath = "Path of Results File"
    
    
    Write-Output $LogPath | Out-File $LogPath -Append
    Write-Output $BootStartTime | Out-File $LogPath -Append
    Write-Output $BootEndTime | Out-File $LogPath -Append
    Write-Output $BootTimeMS | Out-File $LogPath -Append
    Write-Output $MainPathBootTimeMS | Out-File $LogPath -Append
    Write-Output $BootPostBootTimeMS | Out-File $LogPath -Append
    Alles anzeigen

    Netzwerkbenutzer funktioniert aus irgendwelchen Gründen nicht. Vielleicht weiß jemand von euch warum. Habe alle "Logon_Flags" versucht und logischerweise die Anmeldedomäne angepasst. Aber lokaler Admin reicht mir für's Erste :)
    ´
    Vielleicht konnte ich ja jemandem damit noch helfen, der möglicherweise ein ähnliches "Problem" hat.

    Grüße
    Hector

  • Computer Startuptime auslesen und in Array schreiben

    • Hector
    • 10. August 2016 um 10:02

    Hi zusammen,

    erst mal vielen Dank für eure Antworten!
    Sind echt ein paar super Ideen dabei, aber leider brauche ich nicht die Uptime des Computers, sondern die Zeit die der Computer zum starten braucht.
    Obwohl ich ggf die Uptime mit in den Script aufnehme..

    Habt Ihr denn eine Idee, warum mein Script nichts mehr in die Powershell schreibt, nachdem ich diese mit "Runas" gestartet habe?

    Gruß
    Hector

    edit:
    Hier ein Beispiel.
    Einfach in Script Editor einfügen und die Administrator Daten eintragen und starten.

    AutoIt
    RunAs ("-UsernameLocalAdmin-", @ComputerName, "-PasswordLocalAdmin-", 0, 'powershell.exe')
    	  ;WinWaitActive ("Administrator: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe")
    	  Sleep (1500)
    		 send ("cd C:\TimeToTest\") ;change directory for Powershell Commands (needed?)
    		 send ("{ENTER}")
    		 send ("$Event = Get-WinEvent -FilterHashTable @{{}LogName = ""Microsoft-Windows-Diagnostics-Performance/Operational""; ID=100{}} -MaxEvents 1") ;Get Windows Event Microsoft-Windows-Diagnostics-Performance/Operational and add last Event with ID 100 to array "$Event"
    		 send ("{ENTER}")
    		 send ("$eventXML = [xml]$Event.ToXml()") ;convert Array to XML
    		 send ("{ENTER}")
    			send ("$eventXML.Event.EventData.Data[1].'#text' | clip",1) ;Extract "Text" of BootStartTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootStartTime = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[2].'#text' | clip",1) ;Extract "Text" of BootEndTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootEndTime = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[5].'#text' | clip",1) ;Extract "Text" of BootTime in MS to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootTime_MS = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[6].'#text' | clip",1) ;Extract "Text" of MainPathBootTime in MS to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $MainBootTime_MS = ClipGet()
    			   Sleep (250)
    			   send ("$eventXML.Event.EventData.Data[19].'#text' | clip",1) ;Extract "Text" ot BootPostBootTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			   send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $PostBootTime_MS = ClipGet()
    			   Sleep (250)
    		 send ("exit", 1)
    		 send ("{ENTER}")
    		 Sleep (250)
    Alles anzeigen
  • Computer Startuptime auslesen und in Array schreiben

    • Hector
    • 9. August 2016 um 17:41

    Hallo zusammen,

    dies ist mein erster Post, also bitte seit etwas gnädig und verzeiht mir vielleicht den ein oder anderen Fehler bei der Formatierung ;)

    Ich habe ein Problem mit einem von mir erstellten Script, welcher von meinem Vorgesetzen angefragt wurde.
    Ich habe mit AutoIT bisher noch nie etwas zu tun gehabt und habe mir bisher alles mit den Beispielen und viel gegoogle beigebracht.

    Nun brauche ich aber einen Tipp von euch. Vielleicht gibt es einen viel einfacheren weg, wie meinem:
    Also, Anforderung ist, alle möglichen werde eines Computers auszulesen. Bisher lese ich Daten aus wie:
    - Username (@Username)
    - Computername (@Computername)
    - Windows OS, System Version (ServicePacks), Prozessor usw via Registery
    Dauer von Programmstarts und Copyjobs von Servern

    Eine wichtige Anforderung allerdings ist das Auslesen der Computer Startup Informationen.
    Wie löse ich das bisher?
    Ich lasse die Powershell via "Run ('powershell.exe')" starten und gebe die Befehle mit "send" befehlen ein und lasse diese dann mit ("{ENTER}") bestätigen. Ein Beispiel hänge ich weiter unten an.
    Ebenfalls muss ich die Ausgabe über das Notepad formatieren, da ich in der Powershell Ausgabe, welche ich über die Zwischenablage gerundet in Sekunden in ein Array schreibe, einen Zeilenumbruch drin habe. Also Hat mich nur alleine dieser Punkt schon einiges an Nerven gekostet.
    Ihr schlagt möglicherweise nun die Hände über dem Kopf zusammen und denkt: "Mensch ist der blöd.. das geht doch so ... viel einfacher"

    Anbei der Script (allerdings ohne die vorher erstellten Variablen und aktivierten Erweiterungen, nur der Rohe Script um die Registery auszulesen):

    AutoIt
    Func StartupInformation() ;Get Computer startup information via Windows Powershell from Eventlog (Microsoft-Windows-Diagnostics-Performance/Operational)
       Run ('powershell.exe')
    	  Sleep (1500)
    		 send ("cd C:\TimeToTest\") ;change directory for Powershell Commands (needed?)
    		 send ("{ENTER}")
    		 send ("$Event = Get-WinEvent -FilterHashTable @{{}LogName = ""Microsoft-Windows-Diagnostics-Performance/Operational""; ID=100{}} -MaxEvents 1") ;Get Windows Event Microsoft-Windows-Diagnostics-Performance/Operational and add last Event with ID 100 to array "$Event"
    		 send ("{ENTER}")
    		 send ("$eventXML = [xml]$Event.ToXml()") ;convert Array to XML
    		 send ("{ENTER}")
    			send ("$eventXML.Event.EventData.Data[1].'#text' | clip",1) ;Extract "Text" of BootStartTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootStartTime = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[2].'#text' | clip",1) ;Extract "Text" of BootEndTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootEndTime = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[5].'#text' | clip",1) ;Extract "Text" of BootTime in MS to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $BootTime_MS = ClipGet()
    			   Sleep (250)
    			send ("$eventXML.Event.EventData.Data[6].'#text' | clip",1) ;Extract "Text" of MainPathBootTime in MS to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $MainBootTime_MS = ClipGet()
    			   Sleep (250)
    			   send ("$eventXML.Event.EventData.Data[19].'#text' | clip",1) ;Extract "Text" ot BootPostBootTime to Clipboard, convert via Notepad to Solve the round issue because of a wordwrap in clipboard
    			   send ("{ENTER}")
    			   send ("start Notepad.exe")
    			   send ("{ENTER}")
    			   Sleep (250)
    			   send ("{CTRLDOWN}")
    			   send ("v")
    			   send ("{CTRLUP}")
    			   Sleep (250)
    			   send ("{BACKSPACE}")
    			   send ("{CTRLDOWN}")
    			   sleep (250)
    			   send ("a")
    			   sleep (250)
    			   send ("x")
    			   send ("{CTRLUP}")
    			   sleep (250)
    			   send("!+{F4}",0)
    			   Sleep (250)
    			   Local $PostBootTime_MS = ClipGet()
    			   Sleep (250)
    		 send ("exit", 1)
    		 send ("{ENTER}")
    		 Sleep (250)
    	  ;Calculate from MS to Sec
    		 Local $BootTime_Sec = Round($BootTime_MS /1000) ;Calculate BootTime from Milliseconds to Seconds
    		 Local $MainBootTime_Sec = Round($MainBootTime_MS /1000) ;Calculate MainBootTime from Milliseconds to Seconds
    		 Local $PostBootTime_Sec = Round($PostBootTime_MS /1000) ;Calculate PostBootTime from Milliseconds to Seconds
    	  ;Write Information to Array $arr_ComputerStartUpInformation
    	  Global $arr_ComputerStartUpInformation[1][$iCountArrayStartInfo] = [[$BootStartTime, $BootEndTime, $BootTime_Sec, $MainBootTime_Sec, $PostBootTime_Sec]]
    EndFunc ;==> StartupInformation
    Alles anzeigen


    So, und nun kommt mein Problem:
    Ich habe alles bisher immer mit lokalen Administratoren Rechten getestet (ich weiß... Dummer Fehler..).
    Nun haben alle unseren Benutzer, welche nicht in der IT arbeiten, keine lokalen Admin Rechte.
    Zum auslesen via Powershell benötige ich allerdings Admin recht.
    Also nicht lange überlegt und die Powershell mit "RunAs" gestartet. Dummerweise schreibt mir der "Send" Befehl aber nichts in das "Admin" Powershell Fenster.

    es bleibt einfach leer und der Script läuft unbeirrt weiter, als wäre alles okay, nur das meine Variablen / Arrays leer sind.

    Nun meine Fragen:
    1. Warum ist das so?
    2. Wie kann ich das lösen? Ich werde noch wahnsinnig! ;)
    3. Gibt es vielleicht eine viel einfachere Lösung dafür, als diesen super langen und umständlichen Script, für das Auslesen der Bootzeit? Was wichtig wäre: Die Zeit, die der Benutzer zum eingeben des Passworts braucht, soll nicht mit erfasst werden. Daher "MainBootTime" (Vom laden der Winload.exe bis zum Anmeldebildschirm) und die "Post Boot Time" (Vom Anmelden bis zu dem Zeitpunkt, bis die CPU einige Sekunden idle ist)

    Ich wäre euch für jeden Tipp, für jede Erklärung und sei es auch nur für ein Stichwort zur Lösung sehr dankbar!

    Grüße
    Hector

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™