Wir haben Windows 10-Rechner mit 1803. Wir müssen die Druckerwarteschlange bei JEDEM Start leeren.
Der Druckspooler ist auf manuell eingestellt. Wir haben ein Powershell-Skript über den Taskplaner geplant, um sowohl beim Start als auch bei der Benutzeranmeldung als NT AUTHORITY\SYSTEM ein Powershell-Skript auszuführen
Programm/Skript: Powershell Argumente hinzufügen (optional): -File "C:\production\Printer Queue Clear\printqueueClear.ps1"
Das fragliche Skript (Net Stop Spooler ist redundant, wenn der Dienst auf manuellen Start eingestellt ist, ich weiß)
net stop spooler
Remove-Item C:\Windows\System32\spool\PRINTERS\* -Force
net start spooler
Das Problem: Wenn ein Auftrag in die Warteschlange gestellt wird, während der über USB angeschlossene Drucker vom Computer getrennt ist, der Computer ausgeschaltet wird (wobei sich noch Druckaufträge in der Warteschlange befinden), der Drucker wieder angeschlossen wird und der Computer dann neu gestartet wird, werden alle Druckaufträge übermittelt, sobald der Benutzer mit der Anmeldung beginnt. Aus Compliance-Gründen können wir das nicht zulassen.
Die eigentliche Frage ist, warum der Druckspooler die in die Warteschlange gestellten Aufträge ausspuckt, wenn: 1. er auf manuell eingestellt ist und 2. der betreffende Code den Spooler erst startet, nachdem das Druckerspool-Laufwerk geleert wurde.
Antwort1
Ich bin mir nicht sicher, welche Bedeutung es hat, den Spooler-Dienst auf manuell einzustellen. Windows kann Dienste (bei Bedarf) ohne Ihr Eingreifen starten.
Es scheint, dass die einfachste Möglichkeit zur Lösung des beschriebenen Szenarios darin besteht, das Skript beim Herunterfahren oder Abmelden und nicht beim Starten oder Anmelden auszuführen.
Darüber hinaus können Sie den Druckerspoolerdienst beim Herunterfahren oder Abmelden deaktivieren und ihn erst aktivieren, nachdem Sie beim Start oder bei der Anmeldung eine Aufgabe ausgeführt haben, wenn es ein mir nicht bekanntes Szenario gibt.
Antwort2
Ihr Code funktioniert nicht. Versuchen Sie Folgendes, wenn er wirklich auf manuell eingestellt ist:
net stop spooler
Remove_Item $env:windir\System32\spool\PRINTERS\* -Force
net start spooler
Antwort3
Tippfehler im Code, sollte ein-
minus kein_
Unterstrich im Remove-Item
funktionierenden Code: (aber in Powershell, nicht cmd):
net stop spooler
Remove-Item $env:windir\System32\spool\PRINTERS\* -Force
net start spooler