PowerShell PS Filesystemwatcher

luckysh0t

Commander
Registriert
Nov. 2007
Beiträge
2.426
Hallo zusammen,

ich habe folgendes Problem mit meinem Skript.Wenn ich einen Ordner mit mehreren Dateien (z.B Musik, Dokumente,..) in die $Quelle kopiere wird gerne mal nicht alles in $Ziel kopiert.

PowerShell:
$Quelle = 'C:\Users\Luckysh0t\Desktop\1' # Quellpfad
$Ziel = 'Z:\test'                        # Zielpfad
$Log = 'Z:\test\Logfile\Log.txt'         # Logpfad


                       
$fsw = New-Object IO.FileSystemWatcher $Quelle -Property @{IncludeSubdirectories = $true;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}


Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
copy-item -recurse $Args.FullPath $Ziel
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
Out-File -FilePath $Log  -Append -InputObject "The file '$name' was $changeType at $timeStamp"}


Kann mir hier jemand weiterhelfen ? Da dass ganze dann im Hintergrund laufen soll, hat vlt. jmand eine andere Sprache im Sinn ?

Gruß
Lucky
 
Achja, das habe ich vergessen.
Datei erscheint zwar im Log aber ohne created..aber da schaue ich heute abend nochmal genauer nach.

Mir auch noch eingefallen, dass Ordner nicht komplett kopiert werden, sondern derren Inhalt rauskopiert wird - ohne übergeordneten Ordner..
 
Zuletzt bearbeitet:
Ich erinnere mich dunkel an den FileSystemWatcher in C#, ich denke der kommt hier auch zur Anwendung. Da gab's doch einen Buffer der voll laufen könnte und dann zu Unzuverlässigkeiten führte...

Edit:
Hier die Beschreibung zum Buffer: https://msdn.microsoft.com/de-de/li...stemwatcher.internalbuffersize(v=vs.110).aspx
Das Error Event verrät ob der Buffer voll gelaufen ist. Du könntest den Buffer erstmal erhöhen, aber eine wirkliche Sicherheit bietet das auch nicht.

Hier ein Dikussion von stackoverflow:
https://stackoverflow.com/questions...increase-filesystemwatcher-internalbuffersize

Vorschlag ist die Ergebnisse erstmal in eine eigene Queue zu schreiben, um den Buffer schnell zu leeren.

Ob und wie das alles mit PowerShell machbar ist, keine Ahnung. :)
 
Zuletzt bearbeitet:
Wie wäre es mit robocopy? Einfach mit MON und/oder MOT die Quelle überwachen.

Das was Drexel schreibt ist leider wahr und nervig. Auch in reinem C# nervig.
 
Danke, RC hatte ich gar nicht auf dem Schirm.

Code:
:Start
timeout /t 2
ROBOCOPY C:\Users\Luckysh0t\Desktop\Quelle C:\Users\Luckysh0t\Desktop\Ziel /E /M
timeout /t 2

dir C:\Users\Luckysh0t\Desktop\Quelle\ /b /aa %1%
if errorlevel 1 goto delete
if errorlevel 0 goto keep

:delete
del C:\Users\Luckysh0t\Desktop\Quelle\*.* /Q
goto Start

:keep
goto Start


Habe mir jetzt noch eine eine Archivbit Abfrage mit rein gemacht, somit wird die Datei bei einer Änderung erneut kopiert und dann in Abhängigkeit zu dem AB gelöscht oder behalten.
 
Zuletzt bearbeitet:
Zurück
Oben