1 votes

Supprimer les anciennes tâches d'impression de Windows

Sur notre serveur d'impression principal Windows 2003, nous partageons environ 500 imprimantes. Nous avons généralement environ 50 travaux d'impression bloqués. Bien que ce soit loin d'être la fin du monde, cela m'énerve au plus haut point et j'ai tendance à passer 30 minutes par semaine à rechercher et à supprimer les travaux bloqués.

Ce que j'aimerais vraiment, c'est un script pour supprimer tous les travaux d'impression sur toutes les imprimantes datant de plus de 24 heures.

Venant d'un environnement UNIX, je trouve les scripts Windows assez déroutants. Tout conseil sur la façon dont je peux commencer cette tâche serait apprécié. Toute solution complète serait formidable ;)

Santé,

Mat.

6voto

Kevin Colby Points 1750

Cela devrait être assez simple à réaliser avec Powershell. Vous trouverez Powershell un peu plus à votre goût si vous venez de *nix. Vous travaillerez cependant avec WMI, ce qui est à la fois une bénédiction et une malédiction.

Un exemple de code qui fait ce que vous voulez (NON TESTÉ) :

$strComputer = "."

$PrintJobs = get-wmiobject -class "Win32_PrintJob" -namespace "root\CIMV2" -computername $strComputer | Where-Object { $_.StartTime -lt $($(Get-Date).addDays(-1)) }

foreach ($job in $PrintJobs) {
    Write-Host "Canceling job $($job.JobId)"
    $job.Delete
}

En fait, il vous suffit de récupérer tous les objets de WMI dont l'heure de début est inférieure à 24 heures.

2voto

Bob Points 34449

Cela pourrait être votre stratégie. Arrêtez le service spooler, supprimez tous les anciens fichiers et redémarrez le service.

Écrivez ce code script dans un fichier texte et nommez-le "DeleteOldQueuedFile.vbs" :

Dim Fso, Directory, Modified, Files
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Directory = Fso.GetFolder("%systemroot%\system32\spool\printers")
Set Files = Directory.Files

For Each Modified in Files  
   If DateDiff("D", Modified.DateLastModified, Now) >= 1 Then Modified.Delete
Next

Rédigez un fichier batch que vous pouvez programmer comme tâche nocturne :

net stop spooler
DeleteOldQueuedFile.vbs
net start spooler

1voto

p858snake Points 439

Si vous allez dans le kit de ressources de Windows 2003, il y a un outil conçu pour faire cela, appelé Cleanspl.exe.

Kit de ressources : mircosoft url /downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=fr

ou vous pouvez script :

echo Printers - Shutting down the print spooler
net stop "pcounter printer control"
net stop "print spooler"
echo Printers - Deleting print queues
del c:\WINDOWS\system32\spool\PRINTERS\*.* /q

net start "print spooler"
net start "pcounter printer control"
echo Printers - Print spooler Started

0voto

Syberdoor Points 196

Je ne sais pas si la réponse acceptée fonctionnait à l'époque, mais sur les serveurs 2012 R2 et 2016, elle ne fonctionne plus.

La propriété est maintenant TimeSubmitted et ne peut pas être comparée à une DateTime sans être convertie à partir d'un objet WMI Time. De plus, la méthode Delete ne peut pas être appelée comme dans la réponse acceptée à cause des surcharges. Une version actualisée serait donc la suivante :

$printJobs = get-wmiobject -class "Win32_PrintJob" -namespace "root\CIMV2" | Where-Object {[System.Management.ManagementDateTimeConverter]::ToDateTime($_.TimeSubmitted) -lt (Get-Date).addDays(-1)}    
foreach ($job in $printJobs) {
    $job.Delete()
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X