У нас есть компьютеры с Windows 10 и версией 1803. Нам нужно очищать очередь печати при КАЖДОМ запуске.
Диспетчер печати установлен в ручной режим. У нас есть скрипт powershell, запланированный через планировщик задач для запуска скрипта powershell как при запуске, так и при входе пользователя в систему как NT AUTHORITY\SYSTEM
Программа/скрипт: Powershell Добавить аргументы (необязательно): -Файл "C:\production\Printer Queue Clear\printqueueClear.ps1"
Скрипт, о котором идет речь (сетевой спулер остановки избыточен, если служба настроена на ручной запуск, я знаю)
net stop spooler
Remove-Item C:\Windows\System32\spool\PRINTERS\* -Force
net start spooler
Проблема: если задание ставится в очередь, а подключенный по USB принтер отключен от компьютера, компьютер выключается (при этом задания на печать все еще находятся в очереди), принтер снова подключается, а затем компьютер включается, то все задания на печать отправляются, как только пользователь начинает входить в систему. Из соображений соответствия мы не можем допустить этого.
Настоящий вопрос заключается в том, почему диспетчер очереди печати выплевывает поставленные в очередь задания, если: 1. он установлен в ручной режим; 2. рассматриваемый код запускает диспетчер очереди только после очистки привода спулера принтера.
решение1
Я не уверен в значимости установки службы спулера в ручной режим. Windows способна запускать службы (по требованию) без вашего вмешательства.
Похоже, что самый простой способ решения описанной ситуации — запустить скрипт при завершении работы или выходе из системы, а не при запуске или входе в систему.
Кроме того, вы можете отключить службу диспетчера очереди печати при завершении работы или выходе из системы и включить ее только после выполнения какой-либо задачи при запуске или входе в систему, если есть сценарий, о котором я не знаю.
решение2
Ваш код не работает. Попробуйте это, если он действительно настроен на ручной режим:
net stop spooler
Remove_Item $env:windir\System32\spool\PRINTERS\* -Force
net start spooler
решение3
Ошибка опечатки в коде, должно быть-
минус не а_
подчеркивание в Remove-Item
рабочем коде: (но в powershell, а не cmd):
net stop spooler
Remove-Item $env:windir\System32\spool\PRINTERS\* -Force
net start spooler