Powershell : obtention des jobs d'impressions KO

J'ai été confronté ces derniers jours à des dysfonctionnements sur un serveur d'impression, avec un process PrintIsolationHost utilisant toutes les ressources CPU, pénalisant toutes les impressions. Généralement, ce processus utilise 100% du CPU si un des drivers d'impression fonctionne mal. Je vous renvoie à la documentation Microsoft sur le rôle de ce process.

Dans mon cas, je n'avais pas installé de drivers depuis quelques temps et le problème se reproduisait sur toutes les imprimantes ; il s'agissait au final de fichiers générés par un outil tiers gérant l'impression ayant une taille énorme (pas loin du Go pour certains), faisant planter le driver sollicité.

En attendant de trouver la cause, j'ai dû plusieurs fois arrêter à la main les impressions. Chercher imprimante par imprimante sur un serveur en hébergeant une trentaine n'est ni amusant ni productif. J'ai donc développé un script Powershell permettant de remonter les jobs d'impression qui sont en erreur sur un serveur donné, ce qui me permettait de retrouver immédiatement le fichier bloquant.

Write-Host "KO Printing Jobs listing script"
Write-Host "===================================`r`n"
$hostname = Read-Host "Print Server to query"
$printjobs = Get-Printer -computer $hostname | Foreach-Object { Get-PrintJob -Computer $hostname -PrinterName $_.Name }
if($?){
foreach($printjob in $printjobs){
if($printjob.JobStatus -ne "Normal") {
$size = [math]::Round($printjob.Size/1024,0)
Write-Host "Job"$printjob.Id"-"$printjob.DocumentName"(size:"$size "KB) has the following status:"$printjob.JobStatus"on"$printjob.PrinterName
}
}
}

Voici un exemple d'output du script :

Lien pour marque-pages : Permaliens.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.