Попробуйте выполнить проверку или сортировку, используя LastWriteTime, чтобы получить самый последний файл для открытия.
Что-то вроде
$FilePath = 'D:\temp' $LatestFileName = Get-ChildItem -Path $FilePath -File | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Start-Process -FilePath $LatestFileName.FullName
Обновление для ОП ...
Моя точка зрения на фрагмент, который я разместил здесь, была не в том, что он был отдельным от вашего кода. Вы включаете его в свой код наблюдателя, поэтому он запускается только после того, как событие инициируется и происходит сериализация. Это то, что я делал для клиентов в течение нескольких лет, и оно работало так, как задумано.
$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)
Если вы запустите это, он будет действовать только на действие события. Если вы остановите это и перезапустите, он не будет действовать ни на один из существующих файлов в папке, пока не сработает другое событие.
Тем не менее, следует понимать, что ваш код ищет только новые созданные файлы. Таким образом, если вы или пользователь скопируете старый файл с датой из одного места в эту папку, он не откроется, а будет только последний созданный файл. Копия, конечно, не является действием создания. Если это так, вы должны изменить свое событие, обработанное, чтобы перехватить создание или добавление, а затем изменить то, что я дал, чтобы соответствовать этому.