У нас есть запутанное решение некоторых проблем печати (вызванных Citrix и удаленными серверами). В основном с основного сервера мы принудительно отправляем pdf-файл на удаленный компьютер, а затем на удаленном компьютере постоянно запускается скрипт powershell, который «ловит» файл и передает его на локальный принтер
Это работает "отлично"
Однако мы получаем случайные отсева. Сценарий powershell, похоже, не аварийно завершился, потому что он все еще работает в Windows, но реальное действие, похоже, не обрабатывает новые файлы
Сегодня я произвел ОЧЕНЬ МНОГО чтения, и есть упоминание о необходимости именовать и отменять регистрацию событий, когда вы закончите, иначе это может вызвать проблемы переполнения буфера и заставить PowerShell прекратить обработку действия. Но я не уверен, куда это должно идти в коде. Идея состоит в том, что этот скрипт будет работать постоянно, поэтому мы отменяем регистрацию или удаляем событие внутри самого действия или где-то еще?
У меня до этого в действии было МНОЖЕСТВО фиктивной регистрации, чтобы попытаться найти причину неудачи, но, кажется, она останавливается в разных точках без какой-либо уважительной причины (т. Е. Команда не может найти файлы, другие время на команду, чтобы двигаться и т. д.)
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "l:\files\cut"
$watcher.Filter = "*.pdf"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$scandir="l:\files\cut"
$scanbackdir="l:\files\cut\back"
$scanlogdir="l:\files\cut\log"
$sumatra="l:\SumatraPDF.exe"
$pdftoprint=""
$printername= "MainLBL"
### Get the List of files in the Directory, print file, wait and then move file
Get-ChildItem -Path $scandir -filter "*.pdf" -Name | % {
$pdftoprint=$_
& $sumatra -silent $scandir\$pdftoprint -print-to $printername
sleep 3
Move-Item -force $scandir\$pdftoprint $scanbackdir
}
}
### Define what happens when script fails
$erroraction = {echo $(get-date) the process crashed | Out-File -Append l:\files\cut\log\errorlog.txt}
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Error" -Action $erroraction
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}