treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

PowerShellの勉強(プリンタジョブ操作)

PowerShellでプリンタジョブを操作したいことがあったので、調べて動作を確認してみました。
その時の様子をちょっとだけご報告。

プリンタジョブを表示して消す

動作検証として、「Microsoft Print to PDF」を使いました。で、プロパティ画面で「印刷後ドキュメントを残す」という設定を追加でチェックをONにしています。こうすると印刷完了後でもジョブが残って、手動でアレコレ触ることができます。

f:id:treedown:20171219124123p:plain

ここに、こんなプリンタジョブがあるとします。

f:id:treedown:20171219123548p:plain
このジョブをPowerShellで表示させるには、PowerShellで

Get-PrintJob -PrinterName "Microsoft Print to PDF"

と表示します。書式は、
Get-PrintJob -PrinterName "プリンタのオブジェクト名"
で確認可能です。
そうすると、

f:id:treedown:20171219124205p:plain
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

こういうコマンドを打ち込むと…

f:id:treedown:20171219124225p:plain
PowerShellの画面では何も変化がありませんが、プリンタのキュー画面を見ると、

f:id:treedown:20171219124239p:plain
消えました。

ポイント:管理者権限がいる

ユーザ(Administratorグループのユーザ)権限で起動したPowerShellでRemove-PrintJobを実行したら、エラーになりました。

f:id:treedown:20171219124319p:plain
管理者権限で実行するとRemove-PrintJobは実行できました。

PowerShellのウインドウが「管理者:Windows PowerShell」となっていないと、コマンドが実行できないってことがあるようです。

f:id:treedown:20171219124332p:plain
となると、Enter-PSSessionで別PCに接続してプリンタジョブを操作する、となるとパーミッションを気にしないといけない、ということになります。この辺どうなるかは検証しておかないといけないなぁ、と思ったけど、時間がないなぁ、と悩ましいところです。

ちょっとしたTIPS

ちなみに、Enter-PSSessionで接続したら
Get-WmiObject -Class Win32_Printer -ComputerName "コンピュータ名"
と入力すると指定したコンピュータのプリンタ名(プリンタオブジェクト名)一覧が取得できます。なので、

  1. 「Get-WmiObject -Class Win32_Printer -ComputerName  "コンピュータ名"」でプリンタ一覧を取得
  2. 取得したプリンタ名を使って「Get-PrintJob -PrinterName "プリンタのオブジェクト名"」で印刷ジョブ(印刷キュー)を確認
  3. 取得したジョブ情報(ここでは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覚えておこうと思った。