1803 を実行している Windows 10 マシンがあります。起動するたびに印刷キューを消去する必要があります。
印刷スプーラは手動に設定されています。タスク スケジューラでスケジュールされた PowerShell スクリプトを使用して、スタートアップとユーザー ログインの両方で PowerShell スクリプトを NT AUTHORITY\SYSTEM として実行します。
プログラム/スクリプト: Powershell 引数の追加 (オプション): -File "C:\production\Printer Queue Clear\printqueueClear.ps1"
問題のスクリプト (サービスが手動開始に設定されている場合、net stop spooler は冗長であることは承知しています)
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