Versuchen Sie eine Überprüfung oder Sortierung mithilfe von LastWriteTime, um die aktuellste Datei zum Öffnen zu erhalten.
So etwas wie
$FilePath = 'D:\temp' $LatestFileName = Get-ChildItem -Path $FilePath -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Start-Process -FilePath $LatestFileName.FullName
Update für das OP ...
Der Punkt, den ich hier gepostet habe, war nicht der Unterschied zu Ihrem Code. Sie verkörpern es in Ihrem Watcher-Code, so dass es nur ausgelöst wird, nachdem das Ereignis ausgelöst wurde und die Serialisierung erfolgt. Dies ist etwas, was ich seit einigen Jahren für Kunden getan habe und es hat wie geplant funktioniert.
$host.UI.RawUI.WindowTitle = "Watcher" $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "D:\top_secret_path\test" $watcher.Filter = "*.*" $watcher.IncludeSubdirectories = $false $watcher.EnableRaisingEvents = $false $action = { $path = $Event.SourceEventArgs.FullPath $changeType = $Event.SourceEventArgs.ChangeType $logline = "$(Get-Date), $changeType, $path" Add-content "D:\top_secret_path\log.txt" -value $logline # File action $FilePath = $watcher.Path $LatestFileName = Get-ChildItem -Path $FilePath -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Start-Process -FilePath $LatestFileName.FullName } Register-ObjectEvent $watcher "Created" -Action $action | Format-Table -AutoSize while ($true)
Wenn Sie dies ausführen, wirkt sich dies nur auf die Ereignisaktion aus. Wenn Sie dies beenden und neu starten, wirkt sich dies nicht auf vorhandene Dateien im Ordner aus, bis ein anderes Ereignis ausgelöst wird.
Verstehen Sie jedoch, dass Ihr Code nur nach neu erstellten Dateien sucht. Wenn Sie oder ein Benutzer eine ältere datierte Datei von einem Ort in diesen Ordner kopieren, wird diese nicht geöffnet, sondern nur die zuletzt neu erstellte Datei. Eine Kopie ist natürlich keine Erstellungsaktion. Wenn dies der Fall ist, müssen Sie Ihre behandelten Ereignisse so ändern, dass sie zum Erstellen oder Hinzufügen abgefangen werden, und dann das, was ich gegeben habe, um dies zu tun.