Отправка файла на принтер является спулинг-процессом для диспетчера печати.Скорость принтера, определит, выполнено ли задание на печать.Отправка на принтер выполняется быстро, и файловая система завершает работу с файлом и переходит к следующему.
Задания будут просто стоять в очереди в спулере.Вы не выполняете никаких действий с принтером, включая ошибки печати.Вам нужно написать код для отслеживания успеха и сбоя работы принтера, прежде чем обрабатывать другой файл.
Что-то похожее на приведенное ниже.(хотя я не добавил никакой обработки ошибок - я оставлю это вам) (хорошо, что и я использую .txt файлы против Adobe)
С или без -Wait, это работает в моей системекак и ожидалось.Конечно, уберите все содержимое выходного сообщения, если вы не хотите его видеть.Кроме того, Adobe останется открытой, поэтому вам нужно написать код, чтобы убить его.
# Get default printer if that is the printer target
$PrinterName = Get-CimInstance -ClassName Win32_Printer |
ForEach { $PSItem | Where Default -eq $true }
Get-ChildItem 'D:\Temp\NewFiles\*.txt' | Select -First 3 |
foreach {
start-process -FilePath $PSItem.FullName -Verb Print -PassThru #-Wait
do
{
# Get all print jobs on the target printer
$PrintJobs = Get-CimInstance -Class Win32_PerfFormattedData_Spooler_PrintQueue |
Where-Object -Property Name -eq $PrinterName.Name |
Select Name, JobsSpooling, Jobs, JobErrors
Write-Warning -Message "Please wait. Printing $($PSItem.Name) now."
}
while ($PrintJobs.Jobs -ne 0)
# Archive the file when the print job is complete
$paramblock = @{
Path = $PSItem.FullName
Destination = 'D:\temp\Archive'
}
Write-Warning -Message "Printing for $($PSItem.Name) complete. Archiving the file."
Move-Item @paramblock -Verbose
}
# Results, with the -wait, lots of message with each file printed.
<#
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
30 5 1072 2044 0.02 19364 1 notepad
WARNING: Please wait. Printing TestFile0.txt now.
WARNING: Please wait. Printing TestFile0.txt now.
WARNING: Please wait. Printing TestFile0.txt now.
...
WARNING: Printing for TestFile0.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile0.txt Destination: D:\temp\Archive\TestFile0.txt".
29 5 996 1880 0.00 6708 1 notepad
WARNING: Please wait. Printing TestFile1.txt now.
WARNING: Please wait. Printing TestFile1.txt now.
WARNING: Please wait. Printing TestFile1.txt now.
...
WARNING: Please wait. Printing TestFile1.txt now.
WARNING: Printing for TestFile1.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile1.txt Destination: D:\temp\Archive\TestFile1.txt".
27 4 908 1760 0.03 10108 1 notepad
WARNING: Please wait. Printing TestFile2.txt now.
WARNING: Please wait. Printing TestFile2.txt now.
WARNING: Please wait. Printing TestFile2.txt now.
...
WARNING: Printing for TestFile2.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile2.txt Destination: D:\temp\Archive\TestFile2.txt".
#>
# Without the -Wait, lot's of message output for the first file printed, only 3 messages for each file there after.
<#
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
30 5 1032 1908 0.02 3704 1 notepad
WARNING: Please wait. Printing TestFile0.txt now.
WARNING: Please wait. Printing TestFile0.txt now.
WARNING: Please wait. Printing TestFile0.txt now.
...
WARNING: Printing for TestFile0.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile0.txt Destination: D:\temp\Archive\TestFile0.txt".
28 4 936 1788 0.00 13772 1 notepad
WARNING: Please wait. Printing TestFile1.txt now.
WARNING: Printing for TestFile1.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile1.txt Destination: D:\temp\Archive\TestFile1.txt".
28 4 852 1700 0.00 6196 1 notepad
WARNING: Please wait. Printing TestFile2.txt now.
WARNING: Printing for TestFile2.txt complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile2.txt Destination: D:\temp\Archive\TestFile2.txt".
#>
Обновление для ОП с этого.
Я попытался внести небольшие изменения, чтобы приспособить пути к моим файлам и использовать их с PDF-файлами, однако он сразу печатает первый, и я получил 45942 строки предупреждения о записи для первого файла, прежде чем я остановил сценарий
Эти сообщения есть только ради того, что происходит и когда.Они не нужны вообще.
Теперь, несмотря на все сказанное, это звучит экологично.
Я только говорю это, потому что, как показано, то, что я опубликовал, работает, и я провел второй тест, отбросив кучу файлов PDF, и, хотя я получил больше сообщений, потому что Adode потребовалось время, чтобы сделать этои отправить материал на принтер, он все еще работает.
Таким образом, Adobe является основной причиной проблемы, а не PowerShell, когда речь идет о проблемах, с которыми вы сталкиваетесь.PDF-файлы, которые я создал и поместил в эту папку для проверки, были точно такими же, как и в текстовых файлах.
Фактические результаты, без использования -wait:
<#
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
40 4 744 2216 0.05 18060 2 AcroRd32
WARNING: Please wait. Printing TestFile0.pdf now.
WARNING: Printing for TestFile0.pdf complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile0.pdf Destination: D:\temp\Archive\TestFile0.pdf".
49 5 796 2488 0.02 7588 2 AcroRd32
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Please wait. Printing TestFile1.pdf now.
WARNING: Printing for TestFile1.pdf complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile1.pdf Destination: D:\temp\Archive\TestFile1.pdf".
47 5 824 2532 0.00 23528 2 AcroRd32
WARNING: Please wait. Printing TestFile2.pdf now.
WARNING: Printing for TestFile2.pdf complete. Archiving the file.
VERBOSE: Performing the operation "Move File" on target "Item: D:\Temp\NewFiles\TestFile2.pdf Destination: D:\temp\Archive\TestFile2.pdf".
#>
Каждый файл маленький (1 страница - 6 строк текста или около того каждый), имея почти точно такой же контент.Наблюдая за очередью печати во время ее выполнения, вы увидите, сколько времени занимает каждое задание на печать, это не относится к тому, что Adobe ускорила выпуск файла для перемещения.
Чем больше размер PDF,чем дольше это займет на работу.Опять же, используйте сообщение только для небольшого образца, а не для производственного цикла.Помните, что вы буквально запускаете Adobe каждый раз, как показано с помощью уникального сгенерированного ProcessId.