Computer Startuptime auslesen und in Array schreiben

  • 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):


    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

    Hammer high, to the sky
    Follow the warrior and king
    Call out Hector's hymn
    Hammer high, amplify
    Hail to the warrior
    Call out Hector's hymn
    :rock:

  • Habe da zwei nette Scripte gefunden und ein paar Kleinigkeiten daran geändert...

    Uptime by GaryFrost
    Uptime by UEZ

    Im Anhang noch das Icon...

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

    Hammer high, to the sky
    Follow the warrior and king
    Call out Hector's hymn
    Hammer high, amplify
    Hail to the warrior
    Call out Hector's hymn
    :rock:

    Einmal editiert, zuletzt von Hector (10. August 2016 um 11:11)

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

    Anbei noch der PS Script

    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

    Hammer high, to the sky
    Follow the warrior and king
    Call out Hector's hymn
    Hammer high, amplify
    Hail to the warrior
    Call out Hector's hymn
    :rock:

  • Ich glaub ich hab irgendwo auf der Platte ein Script dafür. Suche das morgen mal und gebe dann Rückmeldung :)

    Gesendet von meinem SM-G920F mit Tapatalk

    LG

    Philip

  • Hab mal die Platten durchsucht. Ist es zufällig das was du möchtest?

    LG

    Philip

  • 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?

    Hammer high, to the sky
    Follow the warrior and king
    Call out Hector's hymn
    Hammer high, amplify
    Hail to the warrior
    Call out Hector's hymn
    :rock:

  • 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?

    wann der letzte "Kalt'-Start von Windows war.

  • 06.09.2016 - 08:22 hier. Wusste gar nicht, dass mein PC erst in der Zukunft startet (08.10.2016 - 08:43) :D

    selbst wmic os get lastbootuptime & net statistics workstation gibt bei mir dieses merkwürdiges Datum zurück 8|
    windows 10 halt...

    Einmal editiert, zuletzt von kaesereibe (6. September 2016 um 09:21)

  • Das Datumsformat ist mm.dd.yyyy. Dein letztes Hochfahren war also am 10.08.2016 - in der Vergangenheit :D

    Versetzt du deinen Rechner meist nur in Ruhezustand oder Standby? Dann kann das gut sein.
    (Mach jetzt einfach einen Neustart und probiere es erneut aus ;))

    Grüße autoiter

  • Das Datumsformat ist mm.dd.yyyy.

    liegt wohl daran, daß @n00b-it script aus dem englischsprachigen Raum kommt und die Funktion:

    AutoIt: WMIDateStringToDate
    <strong>Func WMIDateStringToDate($dtmDate)</strong>
    <strong>	Return (StringMid($dtmDate, 5, 2) & "/" & StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))</strong>
    <strong>EndFunc   ;==>WMIDateStringToDate</strong>


    nicht eingedeutsch bzw. internationalisiert wurde.


    hier die dt. Version:

    AutoIt
    <strong>Func WMIDateStringToDate($dtmDate)</strong>
    <strong>	Return (StringMid($dtmDate, 7, 2) & "/" & StringMid($dtmDate, 5, 2)& "/" & StringLeft($dtmDate, 4) & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))</strong>
    <strong>EndFunc   ;==>WMIDateStringToDate</strong>

    und jetzt noch die internationale Variante:

    AutoIt
    <strong>Func WMIDateStringToDate($dtmDate)</strong>
    <strong>	;bnötigt #include <Date.au3></strong>
    <strong>	ConsoleWrite($dtmDate&@CRLF)</strong>
    <strong>	$sDate=StringLeft($dtmDate,4)&'/'& StringMid($dtmDate, 5, 2)&'/'&StringMid($dtmDate, 7, 2)&' '&StringMid($dtmDate,9,2)&':'&StringMid($dtmDate,11,2)&':'&StringMid($dtmDate,13,2)</strong>
    <strong>	Return _DateTimeFormat($sDate)</strong>
    <strong>EndFunc   ;==>WMIDateStringToDate</strong>



    hier wird automatisch das Datumsformat lt. den Ländereinstellungen genommen.


    Ich fahre mein PC jeden Tag hoch und runter =)

    Bist du dir da sicher? Ausschalten über PowerOff heißt bei Win10 nicht unbedingt herunterfahren, kommt auf die Einstellungen an:
    101_Systemeinstellungen.jpg

  • @autoBert
    Erstmal danke für die bearbeiteten Funktionen :)
    In der Tat, du hast recht. Die Funktion WMIDateStringToDate() wurde mir in dem Tool angezeigt. Ich habe das dann einfach so übernommen.

    Werde es aber mal überarbeiten damit man das Format frei wählen kann.

    LG

    Philip