none
Skript sollte als Dienst laufen. Habe praktisch keine Ahnung von Powershell. RRS feed

  • Allgemeine Diskussion

  • Das Skript sollte überprüfen ob eine Datei in einem Verzeichnis erstellt worden ist. Wenn diese Datei nicht leer ist, wird sie weggkopiert. Soweit läuft das aber wenn es als Dienst läuft, dann kopiert es die Datei erst, wenn der Dienst beendet oder neugestartet wurde. Da ich praktisch gar keine Erfahrung mit Powershell habe, habe ich mir das Skript mehr oder weniger zusammenkopiert.

    #logfunktion
    function log($message) {
     Write-Eventlog -LogName Application -Source Application -EventId 1337 -EntryType Information -message $message
    }

    #Pfadangabe und Filter
    $folder = 'c:\test' #Pfad angabe
    $destination = 'c:\test_test' #Zielpfad
    $filter = '*.txt'  #Filter

    #Falls nötig Unterverzeichnisse noch "aktivieren".                        
    $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}

    #Wenn ein File erstellt wird.
    Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
     $name = $Event.SourceEventArgs.Name
     $changeType = $Event.SourceEventArgs.ChangeType
     $timeStamp = $Event.TimeGenerated
     if ((Get-Item $folder\$name).length -gt 0) {
      log "The file $name was $changeType at $timeStamp"
      copy-Item $Event.SourceEventArgs.FullPath $destination
      log "The file $name has been copied to $destination at $timestamp"
     } 
    }
    # Befehl um das Monitoring zu beenden.
    # Unregister-Event FileCreated
    try {
    log "running"
    sleep -seconds 10000
    }
    finally {
    Unregister-Event filecreated
    log "service ended"
    }

    Dienstag, 5. November 2013 09:35

Alle Antworten