PowerShellでプリンタジョブを操作したいことがあったので、調べて動作を確認してみました。
その時の様子をちょっとだけご報告。
プリンタジョブを表示して消す
動作検証として、「Microsoft Print to PDF」を使いました。で、プロパティ画面で「印刷後ドキュメントを残す」という設定を追加でチェックをONにしています。こうすると印刷完了後でもジョブが残って、手動でアレコレ触ることができます。
ここに、こんなプリンタジョブがあるとします。
このジョブをPowerShellで表示させるには、PowerShellで
Get-PrintJob -PrinterName "Microsoft Print to PDF"
と表示します。書式は、
Get-PrintJob -PrinterName "プリンタのオブジェクト名"
で確認可能です。
そうすると、
GUI画面のプリンタジョブと同じように印刷キューに入ってるジョブの情報が表示されます。
プリンタジョブのIDに注目、ここではIDが「2」と表示されているのでこのジョブを操作したい場合には、ID「2」を指定することになります。
このジョブを消すためには、Remove-PrintJobコマンドレットを利用します。
Remove-PrintJobに続けて、対象のプリンタを「-PrinterName "プリンタのオブジェクト名"」で指定して、最後に印刷ジョブのIDを「-ID 2」という具合に指定します。
※書式:Remove-PrintJob -PrinterName "プリンタのオブジェクト名" -ID ID番号
ここでは、Microsoft Print to PDFというプリンタのID 2のジョブを削除したいので、
Remove-PrintJob -PrinterName "Microsoft Print to PDF" -ID 2
こういうコマンドを打ち込むと…
PowerShellの画面では何も変化がありませんが、プリンタのキュー画面を見ると、
消えました。
ポイント:管理者権限がいる
ユーザ(Administratorグループのユーザ)権限で起動したPowerShellでRemove-PrintJobを実行したら、エラーになりました。
管理者権限で実行するとRemove-PrintJobは実行できました。
PowerShellのウインドウが「管理者:Windows PowerShell」となっていないと、コマンドが実行できないってことがあるようです。
となると、Enter-PSSessionで別PCに接続してプリンタジョブを操作する、となるとパーミッションを気にしないといけない、ということになります。この辺どうなるかは検証しておかないといけないなぁ、と思ったけど、時間がないなぁ、と悩ましいところです。
ちょっとしたTIPS
ちなみに、Enter-PSSessionで接続したら
Get-WmiObject -Class Win32_Printer -ComputerName "コンピュータ名"
と入力すると指定したコンピュータのプリンタ名(プリンタオブジェクト名)一覧が取得できます。なので、
- 「Get-WmiObject -Class Win32_Printer -ComputerName "コンピュータ名"」でプリンタ一覧を取得
- 取得したプリンタ名を使って「Get-PrintJob -PrinterName "プリンタのオブジェクト名"」で印刷ジョブ(印刷キュー)を確認
- 取得したジョブ情報(ここではID)を使って「Remove-PrintJob -PrinterName "プリンタのオブジェクト名" -ID ID番号」コマンドでジョブ削除
という流れになります。
■参考にしたURL
MicrosoftのMSDNサイトにあるPowerShellのページでリファレンスが見れました。
Get-PrintJob : https://technet.microsoft.com/ja-jp/library/hh918355(v=wps.630).aspx
Remove-PrintJob : https://technet.microsoft.com/ja-jp/library/hh918362(v=wps.630).aspx
このURL覚えておこうと思った。