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

Beiträge von Scritch

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 3. April 2012 um 08:37

    Ich habe weiterhin das Gefühl, dass AutoIt sich nicht mit den geplanten Tasks versteht. Ich habe versucht eine andere Lösung für mein Problem zu finden, ohne das Skript neu schreiben zu müssen. Habe es letzendlich so gelöst, dass der geplante Task nun ein Skript startet, welches wiederum mein Auswertungsskript startet. Nachdem das Auswertungsskript aber nun angestoßen wurde, passiert nichts mehr. Ich habe es dann nach über einer Stunde abgebrochen. Starte ich das Skript welches das andere Skript startet von Hand, ist die Funktion einwandfrei und es wir fehlerfrei abgearbeitet.

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 15. März 2012 um 10:27

    Sehe ich es richtig, dass es unter Windows keine Lösung für mein Problem gibt?

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 13. März 2012 um 12:01

    Du hast sicher Recht, Dietmar. Allerdings möchte ich das derzeit bestehende Problem zeitnah lösen. Mir erstmal allerhand Wissen über Linux aneignen dauert sicher etwas länger :)

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 13. März 2012 um 09:02

    Task beenden nach 6 Stunden. Er bricht ja nicht vorzeitig ab, das Skript läuft bis zum Ende. Am Ende wird in die auswertung.csv geschrieben, und das wird ja eindeutig gemacht. Daran sehe ich ja, dass Fehler bei der Verarbeitung aufgetreten sind, sprich Einträge einfach verschwinden.

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 13. März 2012 um 08:32

    Das wäre eine Erklärung, chip, wenn da nicht noch die eine Sache wäre: Das gleiche Phänomen taucht auch auf wenn ich - Adminrechte - mich an dem Server anmelde und den geplanten Task starte. Ich habe Zugriffsrechte auf alle Dateien. Dass der Dummyuser keine Zugriffsrechte hat, ist korrekt.

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 13. März 2012 um 08:16

    Warum ich das nicht mit Linuxmitteln mache? Ganz einfach, ich kenne mich nicht damit aus :)
    Die Einstellungen: Ich habe den Task mit meiner Kennung, Adminrechte, angelegt. Ausgeführt wird er als "admin", so heisst der User, ein allgemeiner Admin. Dann nach dem Einrichten des Tasks wird sich abgemeldet und es wird ein Dummyuser angemeldet unter dem halt andere Dinge ausgeführt werden. So startet der Task ja einwandfrei, aber es kommt halt zu den besagten Fehlern.
    Versuchsweise habe ich den Task mal manuell unter meiner Kennung gestartet, was ja auch zu den besagten führte. Die Datei so ausgeführt habe ich ebenfals unter meiner Kennung - keine Verarbeitungsfehler.

  • Versteht sich autoIt mit den geplanten Tasks nicht?

    • Scritch
    • 12. März 2012 um 09:14

    Hallo,
    ich habe hier einen Linux Fileserver wo viele Mitarbeiter über Samba unter Windows ihre Daten ablegen. Um Alte Daten die älter als 1 Monat sind zu archivieren, habe ich ein Script mit autoIt programmiert. Das Skript loggt jeden Abend den Zeitpunkt, wann das letzte Mal auf die Datei zugegriffen wurde. Das muss leider jeden Abend geschehen, da das Alter der Datei nicht aussagekräftig ist. Desweiteren wird bei der abendlichen Datensicherung jede Datei "angefasst" sodass der letzte Zeitpunkt des Zugriffes verfälscht wird. Dafür halt das AutoIt Script.

    Soviel zur Vorgeschichte. Da ich nun nicht jeden Abend um 20 Uhr das Skript von Hand starten möchte habe ich Windows Boardmittel genutzt und einen geplanten Task angelegt der die .exe ausführt. Augenschaeinlich funktioniert es auch. Aber nicht zu 100%. Es befinden sich ca. 4500 Dateien auf dem Server bzw. in dem Laufwerk worauf zugegriffen wird. Nach der abendlichen Auswertung werden Dateipfad + letzter Zugriffszeitpunkt in eine .csv-Datei geschrieben, die am nächsten Tag für die nächste Auswertung wieder eingelesen wird.

    Ist die Auswertung gelaufen wird das Ergebnis wieder in die Datei geschrieben. Wurde die .exe allerdings über den geplanten Task gestartet, so werden immer so 30-50 Dateien weniger in die .csv geschrieben, als vorhanden sind. So werden die vorhandenen Dateien von Tag zu Tag immer weiter reduziert! Starte ich die .exe manuell, ist alles einwandfrei! Keine fehlenden Dateien in der .csv!

    Das Skript läuft auf einem alten Server mit 800Mhz, die Auswertung dauert knapp 40 min. wenn es per geplanten Task gestartet wurde. Starte ich das Skript auf dem gleichen Server von hand dauerts ca. 6 Minuten. Wie kann das bitte sein?

    Hier mal das Skript (Beschreibung zu den einzelnen Zeilen stehen weiter rechts ;) :(

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <Date.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <array.au3>
    #Include <Date.au3>

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

    ;Start: 1. September 2011

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

    $datumheute = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC ;Braucht man so formatiert für _DateDiff
    global $nichtloeschen = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\diese dateien nicht löschen.txt"
    global $log = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\log.txt"
    global $aNichtloeschen
    global $archiv = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\Archiv_30 Tage"
    global $io = 0 ;diese ariable dient zur temporären Speicherung einer information. siehe weiter unten.
    global $aAuswertung
    Global $auswertung = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\auswertung.csv"
    _FileReadToArray($nichtloeschen, $aNichtloeschen)

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

    if not FileExists($auswertung) Then ;Existiert die Auswertungsdatei noch nicht, dann...
    $aDateien = _GetFilesFolder_Rekursiv('.', -1, 0)

    for $k = 1 to ubound($aDateien) - 1
    $neu = StringTrimLeft($aDateien[$k], 2) ;Die Daten im Array werden für die Verarbeitung angepasst
    $aDateien[$k] = "\\yf7sltja\zentral\bnk\d_global" & $neu
    Next

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

    _filecreate($auswertung) ;Wird sie erstellt...
    dim $aAuswertung[ubound($aDateien)][2] ;Dann wird das Array der Größe des $aDateienarrays angepasst...
    for $c = 1 to ubound($aDateien) - 1 ;und anschliessend die Inhalte von einem Array ins andere übertragen
    $aAuswertung[$c][0] = $aDateien[$c]
    $aAuswertung[$c][1] = $datumheute ;schreibt nach der Erstellung das Datum von heute als letzter Zugriff...
    Next

    fileopen($auswertung, 2)
    for $b = 1 to ubound($aAuswertung) - 1
    FileWrite($auswertung, $aAuswertung[$b][0] & ";" & $aAuswertung[$b][1] & @CRLF) ;Schreibt Array in Datei *1
    Next
    fileclose($auswertung)
    Exit ;und das Skript wird dann beendet
    Else
    Global $h = FileOpen($auswertung, 0)
    Global $aAuswertung = _CSV2Array($h, Default, True, 1) ;Existiert die Datei bereits, wird diese in ein Array aufgenommen.
    _ArrayDelete($aAuswertung, ubound($aAuswertung)) ;Löscht den letzten Eintrag im Array, da dieser leer ist. Der wird von dem mit *1 markierten @crlf verursacht

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

    ;Vll. werden nicht alle Daten aus der auswertung.csv vom Vortag eingelesen!!!!!!!!!!!!!
    EndIf

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

    $aDateien = _GetFilesFolder_Rekursiv('.', -1, 0) ;Neue Dateien müssen ab hier nun dem vorhandenen Array hinzugefügt werden

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

    ;---------------------------------------------
    global $pfadtest = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\test.txt"
    FileOpen($pfadtest, 2)
    FileWrite($pfadtest, ubound($aAuswertung) & " Inhalt der eingelesenen Auswertung.csv" & @CRLF)
    For $i = 0 to ubound($aDateien) -1
    FileWrite($pfadtest, $aDateien[$i] & @CRLF)
    Next
    FileClose($pfadtest)
    ;~ MsgBox(1, "lala", "lala")
    ;---------------------------------------------

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

    for $k = 1 to ubound($aDateien) - 1 ;Wiederholtes vorbereiten der neu eingelesenen Daten für die Verarbeitung.
    $neu = StringTrimLeft($aDateien[$k], 2)
    $aDateien[$k] = "\\yf7sltja\zentral\bnk\d_global" & $neu
    Next

    for $i = 1 to ubound($aDateien) - 1
    $search = _ArraySearch($aAuswertung, $aDateien[$i]) ;Such in $aAuswertung (Der Auswertung vom Vortag) nach den Dateien die gerade neu nach $aDateien eingelesen wurden.
    if @error then ;Wird eine Datei nicht gefunden, dann wird @error gesetzt was bedeutet, dass die gerade gesuchte Datei neu ist.
    redim $aAuswertung[ubound($aAuswertung) + 1][2] ;Diese neue Datei wird nun dem Array $aAuswertung hinzugefügt
    $aAuswertung[ubound($aAuswertung) - 1][0] = $aDateien[$i]
    $aAuswertung[ubound($aAuswertung) - 1][1] = $datumheute ;Datei ist neu. Datum von heute wird als letzter Zugriffszeitpunkt gesetzt
    EndIf
    Next

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

    dim $altepfade[1] ;Array wo nachher Positionen der gelöschten Dateien reingeschrieben werden. Wird nachher für deren löschvorgang aus dem Array $aAuswertung benötigt
    for $a = 1 to ubound($aAuswertung) - 1 ;Datei für Datei wird durchgegangen, wann der letzte Zugriffszeitpunkt war
    if FileExists($aAuswertung[$a][0]) then
    $hFile = _WinAPI_CreateFile($aAuswertung[$a][0], 2, 2, 2, 4)
    $aTime = _Date_Time_GetFileTime($hFile)
    _WinAPI_CloseHandle($hFile)
    $letzterzugriff = _Date_Time_FileTimeToStr($aTime[1]) ;In der Variablen steht, wann das letzte Mal auf die Datei zugegriffen wurde
    $letzteUhrzeit = StringRight($letzterzugriff, 8) ;Da das letzte Zugriffsdatum + Uhrzeit falsch formatiert von der Funktion zurückgegeben wird, muss das vorher extrahiert werden
    $letzteDatum = @YEAR & "/" & stringleft($letzterzugriff, 5)
    if NOT $letzterzugriff = @error Then ;Ist die Datei zur Auswertung noch im Zugriff, gibt _Date_Time_FileTimeToStr @error zurück. ist das der Fall, wird die aktuelle Uhrzeit ins Array geschrieben
    if $aAuswertung[$a][1] = 0 Then ;Beim ersten Durchgang ist das Array noch leer, und muss daher noch mit Datum + uhrzeit gefüllt werden
    $aAuswertung[$a][1] = $letzteDatum & " " & $letzteUhrzeit
    Else
    $dif = _DateDiff("h", $letzteDatum & " " & $letzteuhrzeit, $datumheute) ;Steht im Array bereits was, wird das aktuelle Datum, mit dem letzten Zugriffsdatum verglich. Ist es z. B. heute um 15 Uhr gewesen, dann sind das
    if $dif < 16 Then ;waren 16h ;5 Std. unterschied gewesen, somit < 16. Letzter Zugriff wird ins Array geschrieben.
    $aAuswertung[$a][1] = $letzteDatum & " " & $letzteuhrzeit ;Ist die Diferenz größer, wurde zuletzt gestern gegen 23. uhr zugegriffen. Das alte Datum bleibt im Array bestehen
    EndIf
    EndIf
    else
    $aAuswertung[$a][1] = $datumheute
    EndIf
    Else
    ;~ MsgBox(1, "lala", $aAuswertung[$a][0])
    ReDim $altepfade[ubound($altepfade) + 1]
    $altepfade[ubound($altepfade) - 1] = $a ;schreibt den index von dem alten Pfad in das Array. Später können so die alten pfade aus dem Array dann gelöscht werden.
    EndIf
    Next

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

    ;------------------------------------------------
    global $pfadtest1 = "\\yf7sltja\zentral\bnk\d_edv\AutoIT\Bereinigung Laufwerk H\altepfade.txt"
    fileOpen($pfadtest1, 2)
    ;~ _arraydisplay($altepfade)
    For $i = 1 to ubound($altepfade) -1

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

    FileWrite($pfadtest1, $aAuswertung[$altepfade[$i]][0] & @CRLF)
    Next
    FileClose($pfadtest1)
    ;------------------------------------------------

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

    ;~ _arraydisplay($altepfade)
    if ubound($altepfade) > 1 Then ;erst wenn min. ein Eintrag in dem Array vorhanden ist, wird der Löschvorgang gestartet. Ohne die Abfrage fürde es zu einem Bug kommen, der immer den ersten Eintrag im Array löscht was bedeuten würde, dass je Durchgang eine Datei aus dem Vergleich verschwindet
    for $c = 1 to ubound($altepfade) - 1 ;Löscht die nicht mehr vorhandenen Pfade aus $aAuswertung mithilfe von dem erstellten Array $altepfade, wo sich die Indexe der alten Pfade befinden
    _arraydelete($aAuswertung, $altepfade[$c])
    Next
    EndIf

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

    fileopen($auswertung, 2)
    for $b = 0 to ubound($aAuswertung) - 1
    FileWrite($auswertung, $aAuswertung[$b][0] & ";" & $aAuswertung[$b][1] & @CRLF) ;Schreibt Array in Datei
    Next
    fileclose($auswertung)

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

    FileOpen($log, 1)
    for $a = 0 to ubound($aAuswertung) - 1
    $dif = _DateDiff("D", $aAuswertung[$a][1], $datumheute) ;waren Tage nicht stunden ;Prüft die Diferenz in Tagen von dem letzten Zugriff bis heute
    if $dif > 30 Then ;waren 30 Tage ;Wurde die Datei die letzten 30 Tagen nicht benutzt, dann wird sie verschoben
    for $i = 1 to ubound($aNichtloeschen) - 1
    $find = stringinstr($aAuswertung[$a][0], $aNichtloeschen[$i]) ;Der Ordner der nicht gelöscht werden soll ( z. B. \\yf7sltja\...\ausbildung) wird in dem gerade aktuellen String gesucht
    if $find > 0 Then ;Wird er da gefunden, dann wird die Schleife verlassen. Mit der aktuellen Datei soll nichts passieren (soll nicht verschoben werden)
    $io = 0 ;Die eventuell auf 1 gesetzte Variable (in den vorherigen Durchläufen), wird hier weider zurückgesetzt, für den nächsten Durchlauf
    exitloop ;Es kann nun sein, dass ...Ausbildung... erst an 3 Stelle im Array steht. Ist das der Fall, wäre die Variable $io schon vorher 2 mal
    Else ;auf 1 gesetzt wurden, weshalb diese wieder auf 0 zurückgesetzt werden muss, damit das nächste IF diese richtig handelt und die Datei nicht "anfässt"
    $io = 1 ;Wurde der aktuelle String aus "nicht löschen" in dem aktuellen String aus $aAuswertung nicht gefunden, dann bedeutet das, das diese
    EndIf ;Datei verschoben werden kann. Die Variable $io wird auf 1 gesetzt. Datei kann verschoben werden!
    Next
    if $io = 1 Then ;Wird der String in dem Array der nicht zu löschenden Dateien/Ordner gefunden, wird mit dem nächsten Arrayeintrag weitergemacht
    ;~ MsgBox(1, "lala", "hat funktioniert")
    $struktur = stringmid($aAuswertung[$a][0], 33) ;Hier wird der Pfadname der Datei extrahiert...
    $del = FileMove($aAuswertung[$a][0], $archiv & "\" & $struktur, 8) ;war filemove(erstmal beibehalten) ;...damit bei dem Verschiebenvorgang die Ordnerhirarchie mit erstellt wird im Archiv
    if @error Then ;Gibt die Funktion ein Fehler zurück, ist die Datei nicht mehr vorhanden...
    _FileWriteLog($log, $aAuswertung[$a][0] & " Datei wurde bereits von User gelöscht" & @CRLF) ;...das wird dann in die Logdatei geschrieben, da der Löschvorgang vom User selber schon durchgeführt wurde...
    Else ;...und der Eintrag der heute noch in der auswertung.csv vorhanden war, wird mit dem Lauf am nächsten Tag gelöscht.
    _filewritelog($log, $aAuswertung[$a][0] & @CRLF) ;Ansonsten wird ein normaler Logeintrag geschrieben, mit dem Datum/Uhrzeit des Verschiebens
    EndIf
    $io = 0 ;Reset der Variablen für den nächsten Durchgang
    EndIf
    endif
    Next
    fileclose($log)

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

    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)

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

    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")

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

    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf

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

    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|"]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf

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

    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]

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

    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 3)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines

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

    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]
  • Globally Unique Identifier (GUID) Parameter

    • Scritch
    • 10. Februar 2012 um 10:31

    Hallo. Die letzte Aktion ist schon gelaufen, werde aber in der Zukunft mal auf deinen Vorschlag sicher wieder zurückkomen, Progandy. Danke :)

  • Globally Unique Identifier (GUID) Parameter

    • Scritch
    • 7. Februar 2012 um 11:38

    Danke für eure Antworten.
    peethebee : Hilft mir schon ein wenig weiter. Aber sind die Parameter denn auch für die Deinstallation geeignet?

    Spoiler anzeigen

    Parameter

    /qn Zeigt keine Benutzeroberfläche an.
    /qb Zeigt eine einfache Benutzeroberfläche an.
    /qr Zeigt eine eingeschränkte Benutzeroberfläche an, bei der am Ende der Installation ein modales Dialogfeld geöffnet wird.
    /qf Zeigt eine uneingeschränkte Benutzeroberfläche an, bei der am Ende der Installation ein modales Dialogfeld geöffnet wird.
    /qn+ Zeigt außer einem modalen Dialogfeld am Ende der Installation keine Benutzeroberfläche an.
    /qb+ Zeigt eine einfache Benutzeroberfläche an, bei der am Ende der Installation ein modales Dialogfeld geöffnet wird.
    /qb- Zeigt eine einfache Benutzeroberfläche ohne modale Dialogfelder an.


    Ich werde es gleich mal ausprobieren, wie ich die am besten anwende.

    Alina: Nett dass du dir Sorgen machst :) Das sind keine unberechtigten Zweifel, in der Tat. Ich weiß was du damit meinst, dass Passwörter auch in der EXE nicht sicher sind. Allerdings habe ich nicht so große Bedenken, weil:
    - unsere User keine Schreib-/Leserechte auf Wechseldatenträger haben
    - Keine Emails mit ausführbaren Dateianhängen aus dem System verschickt werden dürfen
    - Kein Tools zum de*********** aus dem Internet heruntergeladen werden können.
    Ok, sie könnten nun die Exe mit einem Archivprogramm packen, passwortschützen, das dann per Email versenden und zu Hause das PW herausbekommen. Aber das ist ein Risiko dass ich eingehen muss, wenn ich Software nicht händisch auf 130 PC's deinstallieren möchte :)

    Edit: Der Parameter /qb war das was ich gesucht habe, super :)

  • Globally Unique Identifier (GUID) Parameter

    • Scritch
    • 7. Februar 2012 um 10:45

    Hallo,
    habe diese tolle Funktion von Windows vor kurzem entdeckt und bin prinzipiell begeistert, dass man so ganz einfach mit einem Einzeiler in AutoIt Software deinstallieren kann. Gerade bei uns hier ist das praktisch wo User ohne Adminrechte mit Klick auf die von mir erstellte Datei Software selber deinstallieren können. Eine Kleinigkeit habe ich da dennoch: So wie ich das jetzt habe, müssen die User nach Ausführung der kompilierten trotzdem noch tätig werden, indem sie noch ein Fenster bestätigen müssen. Das ist - man glaubt es kaum - zu viel für manche User. Daher wollte ich gerne wissen, ob es außer dem X-Parameter noch weitere gibt, die die Deinstallation so durchführen, ohne das Zutun des Users.

    Bisher habe ichs so gemacht, was wie gesagt vom Prinzip her ok ist:

    [autoit]

    RunAs("Admin", "Domäne", "Passwort", 1, @ComSpec & " /k MsiExec.exe /X{010D518D-7043-4167-91A9-4003761A3E39}")

    [/autoit]
  • GUID und das Starten von Skripten auf anderen PC's

    • Scritch
    • 25. Januar 2012 um 10:18

    Hallo. Ich habe hier 35 Rechner, auf denen eine Deinstallation von einem bestimmten Programm durchgeführt werden muss. Vom Prinzip her kann ich das ja auch über die Konsole mache über die GUID. Das hier habe ich: MsiExec.exe /X{0EF832A4-A00C-4539-BCE7-FC3A57A8BAC0}. Meine erste Frage vor der eigentlichen Frage ist, ob das Fenster welches den Benutzer zur Bestätigung der Installation auffordert, auch unterdrückt werden kann mit einem Schalter oder durch AutoIT und ob ich diese unterdrückte Fenster mit AutoIT auch bestätigen kann.

    Die eigentliche Frage ist, ob ich Skripte auf fernen Rechnern in meinem eigenen Netzwerk starten kann. Geht das vll. so:

    [autoit]

    run("\\computername\d$\skript.au3")

    [/autoit]
  • Problem mit WinExists()

    • Scritch
    • 12. Januar 2012 um 10:55

    Oh, sehr gute Idee. Werde es mal ausprobieren. Danke dir :)

  • Problem mit WinExists()

    • Scritch
    • 11. Januar 2012 um 11:41

    Hallo. Nein, es ist nicht im Fokus. Und das ist auch gut so. Ich wollte damit eine Powerpointpräsentation steuern. Setze ich das Fenster manuell in den Fokus mit WinActivate() kann ich die Präsentation nicht mehr steuern. Dass das Fenster nur ausgeblendet wird, war auch mein erster Gedanke. Komischerweise ist es beim Start von KinEmote selber noch nicht existent.
    Gibt es sonst noch eine Alternative abzufragen, ob die Bewegungssteuerung aktiviert wurde/ist?

  • Problem mit WinExists()

    • Scritch
    • 11. Januar 2012 um 10:18

    Hallo,
    ich habe ein kleines Problem mit WinExists. Folgendes: Ich habe hier eine Kinect stehen. Diese Bewegungssteuerung von Microsoft. Dafür gibt ein Programm um Anwendungen jeglicer Art steuern zu können. WinEmote heisst es. Sobald ich die Steuerung mit der Kinect übernehme, erscheint ein Fenster in der Ecke wo ich abgebildet bin. Dieses Fenster möchte ich abfragen ob es existiert - mit folgendem Skript:

    [autoit]

    while 1
    if winexists("KinEmote Streamviewer") Then
    MsgBox(1, "lala", "lala")
    EndIf
    EndIf

    [/autoit]


    Funktioniert auch. Das Problem ist nun, sobald ich den Steuerungsmodus mit der Kinect verlasse und das Fenster wo ich abgebildet bin verschwindet, sagt mir WinExists trotzdem weiterhin, dass das Fenster existiert... Wie kann das sein?

    Hier mal paar Infos über das Fenster von dem infotool von Autoit:

    Spoiler anzeigen

    >>>> Window <<<<
    Title: KinEmote Streamviewer
    Class: WindowsForms10.Window.8.app.0.2bf8098_r16_ad1
    Position: 20, 20
    Size: 251, 159
    Style: 0x16010000
    ExStyle: 0x00050008
    Handle: 0x000404FC

    >>>> Control <<<<
    Class: WindowsForms10.Window.8.app.0.2bf8098_r16_ad1
    Instance: 1
    ClassnameNN: WindowsForms10.Window.8.app.0.2bf8098_r16_ad11
    Name: pictureBoxOverlay
    Advanced (Class): [NAME:pictureBoxOverlay]
    ID: 263422
    Text:
    Position: 0, 0
    Size: 251, 159
    ControlClick Coords: 184, 114
    Style: 0x56000000
    ExStyle: 0x00000000
    Handle: 0x000404FE

    >>>> Mouse <<<<
    Position: 204, 134
    Cursor ID: 0
    Color: 0x757500

  • ubound($aArray) auch für Spaltenzahl?

    • Scritch
    • 13. Dezember 2011 um 11:09

    Okay, Facepalm für mich dafür dass ich nicht selber in die Hilfe geschaut habe...

  • ubound($aArray) auch für Spaltenzahl?

    • Scritch
    • 13. Dezember 2011 um 10:48

    Hallo,
    Ubound gibt ja leider nur die Anzahl der Zeilen eines Array zurück. Gibt es auch die Möglichkeit sich die Anzahl der Spalten eines Arrays zurückgeben zu lassen?

  • Script zu uhrzeit X beenden

    • Scritch
    • 13. Dezember 2011 um 08:14
    Zitat von Oscar

    Benutze doch einfach einen Timer (hier zum Beispiel nach 5 Sekunden):

    Spoiler anzeigen
    [autoit]


    $iTimer = TimerInit()
    $iBreak = 5000 ; <- in Millisekunden
    while 1
    Sleep(20)
    If TimerDiff($iTimer) > $iBreak Then ExitLoop
    WEnd
    MsgBox(0, 'Test', 'Ende!')

    [/autoit]
    Alles anzeigen


    Ähnlich löse ich es ja bisher, was mir aber zu unkomfortable ist. Ich lasse das Skript mit einem geplanten Task starten, meinetwegen um 5 Uhr nachts, und es soll um 9: Uhr aufhören zu laufen. Da muss man sich ja immer von der Startzeit bis zu der Endzeit die Zeit ausrechnen, wie lange das Skript laufen darf um es dann zu beenden. Ich denke die Möglichkeit von LuBu ist das optimalste für mich. Danke euch! :)

  • Script zu uhrzeit X beenden

    • Scritch
    • 12. Dezember 2011 um 14:57

    Moin,
    ich habe ein Skript. Oh Wunder :D In diesem Skript ist eine For-Schleife eingebaut die eine Auswertung von verschiedenen Dateien auf verschiedenen PC's vornimmt. Laufzeit dieser Schleife liegt bei ca. 12-14 Minuten. Nun sollte dieses Skript die For-Schleife unendlich wiederholen. kein Problem, löse ich mit einer While-Schleife. Allerdings soll die While-Schleife zu Uhrzeit X beendet werden. Ich bin mir nicher, ob ich es sauberer lösen kann als so:

    [autoit]

    while 1
    $zeit = @hour & ":" & @MIN
    if $zeit = "09:00" then ExitLoop
    WEnd

    [/autoit]


    Das könnte ich zu Anfang jedes Schleifenvorganges abfragen lassen (Eine Auswertung dauert ca. 15 - 20 Sekunden). Hätte ich jetzt aber eine Auswertung die pro Schleifenvorgang meinetwegen 5 Minuten dauern würde kann ich nicht sagen "los, skript soll um 9:00 Uhr beendet werden... Welche anderen Lösungen gibt es da noch?

  • Neue AMD "Bulldozer"-Architektur - was haltet ihr davon?

    • Scritch
    • 14. November 2011 um 12:29

    Hallo,
    gerade mal geschaut. Spare efektiv so 10-15 € wenn ich bei Mindfactory bestellen würde. Da bleibe ich dann lieber Alternate treu und weiss was ich habe :)

    Denk Artikel kenne ich schon mit den Win 8 Benchmarks, danke.

  • autoBert feiert

    • Scritch
    • 13. November 2011 um 22:42

    Alles Gute :)

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™