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

Beiträge von thedoginthewok

  • Auf Netzwerklaufwerk zugreifen, ohne neu zu mappen.

    • thedoginthewok
    • 16. September 2013 um 17:17

    net use funktioniert nicht wenn man bereits ein Netzwerklaufwerk vom gleichen Server verbunden hat.

    Ich habe jetzt als einfache Lösung ein "Mini Script" was mit RunAs mein Script aufruft.

    Dadurch kann ich in meinem Script UNC Pfade mit anderem User aufrufen.

  • Auf Netzwerklaufwerk zugreifen, ohne neu zu mappen.

    • thedoginthewok
    • 16. September 2013 um 16:02

    RunAs habe ich noch nicht versucht. Probier ich gleich aus.

    Den Link habe ich vorhin auch bei Google gefunden, aber der Threadersteller dort ist dann auf DriveMapAdd zurückgewichen und hat sein Problem anders gelöst.

    edit:
    Ich bin mir nicht sicher ob ich es richtig gemacht habe, aber mit RunAs funktioniert es nicht.

    edit2:

    Ich habe es nun doch noch hingekriegt:

    [autoit]

    RunAs("****", "****", "****", 2, @ComSpec & ' /c ' & 'copy ' & $filename & ' "\\server\freigabe"', "C:\ordner")

    [/autoit]

    Ich habe das einfach an das Ende des Scripts hinzugefügt. Erst bilde ich die Backup datei temporär auf der lokalen Platte (kein Problem, da es sich um weniger als 100KByte handelt) und danach kopiere ich es aufs Netzwerklaufwerk und lösche die Datei von der lokalen Platte.

  • Auf Netzwerklaufwerk zugreifen, ohne neu zu mappen.

    • thedoginthewok
    • 16. September 2013 um 15:36

    Hallo,

    Ich habe ein Script geschrieben das über SFTP die Konfiguration von einem pfSense Router/Firewall sichert.

    Dieses Script soll täglich ausgeführt werden und die Config auf ein Netzwerklaufwerk legen. Dies funktioniert auch einwandfrei, wenn das Script normal gestartet wird.

    Da ich allerdings das Script als geplanten Task ausführen will, habe ich ein Problem. Wenn ich den Task mit System User laufen lasse, hat das Script keine Berechtigung auf das Netzwerklaufwerk zu schreiben.

    Ich kann DriveMapAdd nicht verwenden, da das Laufwerk auf dem Computer schon verbunden ist und von einer anderen Software verwendet wird (das Netzwerklaufwerk verbindet sich mit einem NAS4Free und dort werden alle Backups gelagert). Das vorhande Netzwerklaufwerk darf also auch nicht getrennt und neu verbunden werden.

    Ich habe schon versucht, den Task mit anderem User laufen zu lassen, aber das funktioniert nicht. (Fehlermeldung: "Diese Aufgabe erfordert, dass das angegebene Benutzerkonto über die Rechte "Anmelden als Stapelverarbeitungsauftrag" verfügt. Weitere Informationen zum Festlegen dieser Richtlinie finden Sie im Thema zum Aufgabensicherheitskontext in der Hilfe.")

    Was kann ich da tun? Wenn ich einen UNC Pfad verwende ("\\computername\freigabe\") geht es nicht, da es versucht sich mit dem System User anzumelden. Kann ich einen UNC Pfad mit alternativer Authentifizierung verwenden?

  • Dateien und Ordner älter als 7 Tage löschen.

    • thedoginthewok
    • 22. August 2012 um 15:01

    So vielen dank an euch alle. Das Skript funktioniert so weit.

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    Func _DeleteOldFiles($Path, $Time)
    If StringRight($Path, 1) <> '\' Then $Path &= '\'
    $Search = FileFindFirstFile($Path & '*')
    While 1
    $File = FileFindNextFile($Search)
    If @error Then
    ExitLoop
    ElseIf @extended Then
    DirRemove ($Path & $File & '\')
    _DeleteOldFiles($Path & $File & '\', $Time)
    Else
    $FileTime = FileGetTime($Path & $File, Default, 0)
    If IsArray($FileTime) Then Dim $StartTime = $FileTime[0] & '/' & $FileTime[1] & '/' & $FileTime[2] & ' ' & $FileTime[3] & ':' & $FileTime[4] & ':' & $FileTime[5]
    If _DateDiff('D', $StartTime, @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC) > $Time Then FileDelete($Path & $File)
    EndIf
    WEnd
    EndFunc ;==>_DeleteOldFiles

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

    _DeleteOldFiles ("D:\testordner", 7)

    [/autoit]

    Ich habe einfach vor dem rekursiven Aufruf der Funktion ein dirremove eingefügt, das löscht ordner standardmäßig nur dann wenn sie leer sind. Bei meinen Tests hat alles so funktioniert wie es soll, viele Dank nochmals.

  • Dateien und Ordner älter als 7 Tage löschen.

    • thedoginthewok
    • 22. August 2012 um 14:09

    Wenn ich an der Stelle einfach DirRemove mache, dann versuche ich ja immer zu löschen, egal ob der Ordner leer ist oder nicht. Ich will aber das es erst alle Dateien und Unterordner auf Alter überprüft und dann löscht. (Und mit Dateien funktioniert das auch gut.)

  • Dateien und Ordner älter als 7 Tage löschen.

    • thedoginthewok
    • 22. August 2012 um 13:39

    Raupi

    Ob die Datei ein Verzeichnis ist, sehe ich ja an dem @extended macro.

    BinDannMalWeg

    Ich kannte das Datei Include nicht, aber der Teil funktioniert ja schon. Deine Lösung ist zwar sehr schön und kurz, aber da werden doch Ordner genauso behandelt, wie bei meinem Script. Oder hab ich was übersehen ?

    Vielen Dank, das ihr euch das anguckt.

  • Dateien und Ordner älter als 7 Tage löschen.

    • thedoginthewok
    • 22. August 2012 um 10:20

    Hallo

    Ich habe angefangen ein Script zu schreiben, das alle Dateien in einem Ordner und in dessen Unterordnern löschen soll, die älter als 7 Tage sind.
    Das funktioniert auch so weit ganz gut, allerdings lässt das Script leere Ordner zurück und bricht komplett ab, wenn ein Ordner bereits leer ist.

    Wie kann ich erreichen, das das Skript bei leeren Ordnern nicht abbricht, sondern nur die aktuelle Funktion verlässt ?

    Wie kann ich meine Löschfunktion so umfunktionieren, das sie leere Ordner mit entfernt ? Ich habe die Funktion kopiert und anders benannt (deleteemtpydirectories), aber ich weiß nicht, ob eine zweite Funktion dafür überhaupt nötig ist.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Func schaltjahr ($jahr)
    If (Mod($jahr, 4) = 0) Then
    If (Mod($jahr, 100) = 0) Then
    If (Mod($jahr, 400) = 0) Then
    Return 1
    Else
    Return 0
    EndIf
    Else
    Return 1
    EndIf
    EndIf
    EndFunc

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

    Func tagedesmonats ($month, $jahr)
    Switch $month
    Case 1
    Return 31
    Case 2
    If schaltjahr($jahr) Then
    Return 29
    EndIf
    Return 28
    Case 3
    Return 31
    Case 4
    Return 30
    Case 5
    Return 31
    Case 6
    Return 30
    Case 7
    Return 31
    Case 8
    Return 31
    Case 9
    Return 30
    Case 10
    Return 31
    Case 11
    Return 30
    Case 12
    Return 31
    EndSwitch
    EndFunc

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

    Func deleteold ($filename, $days)

    $zeit = FileGetTime ( $filename )
    If ($zeit[0] = @YEAR) Then
    ;Datei ist aus diesem Jahr
    If $zeit[1] = @MON Then
    ;Datei ist aus diesem Monat
    If $zeit[2] = @MDAY Then
    ;Datei ist von Heute
    ElseIf (@MDAY - $zeit[2]) >= $days Then
    ;Datei ist älter/gleichalt als sieben Tage, also löschen
    Return 1
    EndIf
    ElseIf $zeit[1] < @MON Then
    ;Monatszahl in Datei ist kleiner als aktuelle Monatszahl
    ;Prüfen ob Datei von letztem Monat ist
    If ((@MON - $zeit[1]) = 1) Then
    $alterintagen = (tagedesmonats($zeit[1],@YEAR) - $zeit[2]) + @MDAY
    If $alterintagen >= $days Then
    return 1
    Else
    Return 0
    EndIf
    ElseIf ((@MON - $zeit[1]) > 1) Then
    ;Datei ist älter als ein Monat, also Löschen
    Return 1
    EndIf
    EndIf
    ElseIf $zeit[0] < @YEAR Then
    If ((@YEAR - $zeit[0]) = 1) Then
    If @MON Then
    If ($zeit[1] = 12) Then
    $alterintagen = (31 - $zeit[2]) + @MDAY
    If $alterintagen >= $days Then
    return 1
    Else
    Return 0
    EndIf
    EndIf
    EndIf

    ElseIf ((@YEAR - $zeit[0]) > 1) Then
    ;Datei ist älter als ein Jahr
    EndIf
    Return 1
    EndIf

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

    Return 0

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

    EndFunc

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

    #cs
    Func deleteemtpydirectories ($pfad)

    $search = FileFindFirstFile($pfad & "\*")

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

    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    ;MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then
    ExitLoop
    Else
    If @extended Then
    ;Wenn @extended gleich 1 ist, ist die "datei" ein Ordner, also ruft die Funktion sich selbst mit dem Ordner Pfad auf.
    deleteloop ($pfad & "\" & $file)
    Else
    ;@extended gleich 0, also Alter Prüfen
    If (deleteold($pfad & "\" & $file, 7)) = 1 Then
    ;MsgBox ( 0 , "" , "datei '" & $file & "' wird gelöscht" , "" , "")
    FileDelete($pfad & "\" & $file)
    Else
    ;MsgBox ( 0 , "" , "datei '" & $file &"' wird nicht gelöscht" , "" , "")
    EndIf
    EndIf
    EndIf
    WEnd

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

    ; Handle für Suche schliessen
    FileClose($search)

    EndFunc
    #ce

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

    Func deleteloop ($pfad)

    $search = FileFindFirstFile($pfad & "\*")

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

    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    ;Hier bricht das ganze Script ab.
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then
    ExitLoop
    Else
    If @extended Then
    ;Wenn @extended gleich 1 ist, ist die "datei" ein Ordner, also ruft die Funktion sich selbst mit dem Ordner Pfad auf.
    deleteloop ($pfad & "\" & $file)
    Else
    ;@extended gleich 0, also Alter Prüfen
    If (deleteold($pfad & "\" & $file, 7)) = 1 Then
    ;MsgBox ( 0 , "" , "datei '" & $file & "' wird gelöscht" , "" , "")
    FileDelete($pfad & "\" & $file)
    Else
    ;MsgBox ( 0 , "" , "datei '" & $file &"' wird nicht gelöscht" , "" , "")
    EndIf
    EndIf
    EndIf
    WEnd

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

    ; Handle für Suche schliessen
    FileClose($search)

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

    EndFunc

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

    deleteloop ("D:\testordner")

    [/autoit]

    Ich habe übrigens ziemlich viel aus der AutoIT Dokumentation geklaut, die ist echt gut.

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™