1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShellによる印刷ジョブのクエリと削除のコード例

2022-02-05 05:33:57

Windows 8.1 または Server 2012 R2 の場合

Windows 8.1およびServer 2012 R2には、ローカルおよびリモートプリンターを管理するためのすべてのコマンドを含むPowerShellコンポーネント: "PrintManagement"が付属しています。

前回のTipsでは、プリンターのジョブを読み取る方法を紹介しました。各印刷ジョブにはJobStatusというプロパティがあり、そのジョブが正常に印刷されたかどうかを示しています。

すべてのステータスはこのように取得することができます。

コピーコード コードは以下の通りです。

PS> Import-Module PrintManagement
PS> [Microsoft.PowerShell.Cmdletization.GeneratedTypes.PrintJob.JobStatus]::GetNames([Microsoft.PowerShell.Cmdletization. GeneratedTypes.PrintJob.JobStatus])
Normal
Paused
Error
Deleting
Spooling
Printing
Offline
PaperOut
Printed
Deleted
Blocked
UserIntervention
Restarted
Complete
Retained
RenderingLocally

次のステップは、すでに存在するタスクにフィルタをかけることです。例えば、印刷ジョブが完了したのか、それとも障害が発生したのかをリストアップしたい場合です。

コピーコード コードは以下の通りです。

$ComputerName = $env:COMPUTERNAME
Get-Printer -ComputerName $ComputerName | ForEach-Object {
  Get-PrintJob -PrinterName $_.Name -ComputerName $ComputerName |
    Where -Object { $_.JobStatus -eq 'Complete' -or $_.JobStatus -eq 'Error' -or $_.JobStatus -eq 'Printed'}
 }

印刷ジョブの削除も非常に簡単で、Remove-PrintJobは次のように行うことができます。

コピーコード コードは以下の通りです。

$ComputerName = $env:COMPUTERNAME
Get-Printer -ComputerName $ComputerName | ForEach-Object {
  Get-PrintJob -PrinterName $_.Name -ComputerName $ComputerName |
    Where -Object { $_.JobStatus -eq 'Complete' -or $_.JobStatus -eq 'Error' -or $_.JobStatus -eq 'Printed'}
 }
 Remove-PrintJob -CimSession $ComputerName