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"
}