Serveur d'impression

Script PowerShell pour auditer l'utilisation de la file d'attente d'impression – Serveur d’impression

Le 17 juin 2019 - 6 minutes de lecture

Mise à jour 2011-07-06: La prise en charge des serveurs Windows 2008+ a été ajoutée, ainsi que la gestion des serveurs autonomes par rapport aux serveurs en cluster.

Si vous ne l’avez pas encore vue, consultez mes publications sur mon VBScript de stratégie de groupe pour remplacer, ajouter, supprimer et gérer les files d’imprimantes utilisateur.

Parfois, la gestion d’un serveur d’impression peut être très pénible… OK, de qui rigolons-nous? C’est pénible! Période. Les échecs d'imprimante, les nouvelles installations ou quelqu'un a oublié de vous dire qu'il a jeté cette imprimante dans le compacteur de déchets. Ce sont toutes des choses qui peuvent s’ajouter à des files d’attentes d’imprimantes qui ne sont tout simplement plus utilisées.

Pour résoudre ce problème, j'ai écrit un script PowerShell qui vérifie les files d'attente d'impression sur un serveur (local ou distant) et nous indique si une file d'attente d'impression a été utilisée et, le cas échéant, à quel moment.

Le script fonctionne en commençant par saisir une liste de toutes les files d'attente d'impression sur un serveur d'impression. Il passe ensuite en revue tous les journaux du journal des événements du serveur d’impression et recherche spécifiquement les événements «Imprimer». Les événements clés que nous recherchons sont ceux décrits ci-dessous, car ils ont les informations dont nous avons besoin, un nom de file d'attente et une heure. Voici à quoi cela ressemble sur un serveur Windows 2003:

"Document [number], PowerShell Script to Audit Printer Queue Usage appartenant à [user] a été imprimé sur [printer] via port [port]. Taille en octets: [bytes]; pages imprimées: [pages]"

Le tri de tous les événements peut prendre un certain temps, mais il permet également de savoir si une file d'attente a été utilisée ou non, et à quel moment.

Une fois terminé, nous obtenons un joli petit fichier CSV à regarder. À partir de là, les files d'attente utilisées ou non devraient être assez évidentes.

Le tenir! Il y a une mise en garde… n’y at-il pas toujours? Le script ne peut remonter que dans le journal des événements. Par conséquent, si vos serveurs sont configurés pour ignorer les anciens événements ou si le journal système a été récemment effacé, ce script peut ne pas être aussi utile. De toute façon, le script est ci-dessous. Prendre plaisir!

# Nom du script: PrinterQueueAudit.ps1
# Créé le: 2010-11-18
# Auteur: Gregory Strike
# URL: //www.gregorystrike.com/2010/11/18/powershell-script-to-audit-print-server-queue-usage/
#
# Objet: Un script utilisé pour auditer les files d’imprimante sur un serveur (local ou distant)
# pour déterminer quand les files d'attente ont été utilisées pour la dernière fois ou pas du tout. Un CSV
Le fichier # (PrinterQueueAudit.csv) est ensuite généré avec les résultats.
#
# Configuration requise: Ce script nécessite la capacité de lire les files d’imprimantes et le 'Système'
# journal des événements sur le serveur d'impression. Le script ne peut que revenir en arrière
# heure aussi loin que le journal des événements.
#
#  Mises à jour:
# 2011-07-06
# Ajout du support Windows 2008+
# Ajout de code pour gérer certains serveurs autonomes.

Clair

# Définissez ces variables manuellement.
#MANUAL - Remplacez ceci par le nom de votre serveur d'impression.
$ Ordinateur = "VOTRE SERVEUR"
#MANUAL - $ Computer est-il un nom en cluster?
Cluster $ = $ True

#Créez un type personnalisé (file d'attente) pour définir nos files d'attente et leur utilisation.
Add-Type @ '
public class Queue 
                public System.String Name;
                public System.Boolean Used;
                public System.DateTime LastUsed;

'@

Write-Host ("Traitement serveur d'impression:" + $ Ordinateur)

# Détecter la version Windows
$ WMIVersion = Get-WMIObject -Classe Win32_OperatingSystem -Propriété "Version" -Ordinateur $ Ordinateur
$ Version = [UInt32]$ WMIVersion.Version.SubString(0,1)
Si ($ Version -ge 6) 
    Write-Host ("Version du système d'exploitation: Windows 2008 ou version ultérieure.")
    $ Windows2008 = $ True
 autre 
    Write-Host ("Version du système d'exploitation: Windows 2003 R2 ou version antérieure.")
    $ Windows2008 = $ Faux


#Obtenir toutes les files d'attente d'impression du serveur.
Write-Host "Rassembler les files d'attente d'imprimantes ..."
Si (Cluster $) 
    $ ServerQueues = Get-WMIObject -Classe Win32_PerfFormattedData_Spooler_PrintQueue -Propriété "Prénom" -Ordinateur $ Ordinateur
 autre 
    $ ServerQueues = Get-WMIObject -Classe Win32_Printer -Propriété "Prénom" -Ordinateur $ Ordinateur


#Créez un tableau de notre type personnalisé et remplissez-le avec nos noms de file d'attente.
$ Files d'attente = @ ()
Pour chaque ($ ServerQueue dans $ ServerQueues) 
    $ File d'attente = Nouvel objet -typeName Queue
    Si (Cluster $) 
        $ SplitName = ($ ServerQueue.prénom.Divisé(""))
        $ File d'attente.prénom = $ SplitName[[[[$ SplitName.Compter - 1]
     autre 
        $ File d'attente.prénom = $ ServerQueue.prénom
    

    $ File d'attente.Utilisé = $ Faux
    $ Files d'attente = $ Files d'attente + $ File d'attente


Write-Host "Collecte des données du journal des événements à partir du journal des événements. Cela peut prendre un certain temps ..."
#Obtenir tous les événements du journal des événements de l'ordinateur.

Si ($ Windows2008) 
    $ Événements = (Get-WinEvent Microsoft-Windows-PrintService/Opérationnel -Ordinateur $ Ordinateur)
	 autre 
    $ Événements = (Get-EventLog -LogName "Système" -Ordinateur $ Ordinateur)


$ NumEvents = $ Événements.Compter
Write-Host ("...Il y a " + $ NumEvents + "enregistrements.")

# Parcourez TOUS les événements et ne traitez que les événements "Imprimer".
Write-Host("Traitement des événements d'impression ...")
Pour (Index $ = ($ Événements.Compter - 1) Index $ -ge 0; Index $-) {
    $ PercentComplete = (100 - [Math]::Rond( (Index $ / ($ NumEvents - 1) * 100), 0))
    Si ($ PercentComplete -ne $ LastPercentComplete) 
        #Outputs the percent ... Cela semble bon dans la console PowerShell, pas tellement dans ISE.
        Write-Host([System.String]::Format("`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`0: 000% terminé. ", $ PercentComplete)) -NoNewLine
        $ LastPercentComplete = $ PercentComplete
    

    $ Log = $ Événements[[[[Index $]

    # Vérifiez si l'événement était un événement de travail d'impression.
    Si ($ Log.Message.Contient("était imprimé sur")) {

        Message #Strip pour obtenir uniquement le nom de l'imprimante
        Si ($ Windows2008) 
            $ Step1 = $ Log.Message.SubString(0, $ Log.Message.Indice de("par le port"))
         autre 
            $ Step1 = $ Log.Message.SubString(0, $ Log.Message.Indice de("via port"))
        

        $ Imprimante = $ Step1.SubString($ Step1.Indice de("était imprimé sur") + 16)        

        # Trouver le nom de la file d'attente dans notre tableau et mettre à jour avec les résultats.
        Pour chaque($ File d'attente dans $ Files d'attente) 
            Si ($ File d'attente.prénom -eq $ Imprimante) 
                $ File d'attente.Utilisé = $ True

                # Gagnez seulement du temps s'il est plus récent.
                Si ($ Windows2008) 
                    Si ($ Log.TimeCreated -gt $ File d'attente.LastUsed) 
                        $ File d'attente.LastUsed = $ Log.TimeCreated
                    
                 autre 
                    Si ($ Log.Temps généré -gt $ File d'attente.LastUsed) 
                        $ File d'attente.LastUsed = $ Log.Temps généré
                    
                

            
        
    }
}

Write-Host("")
Write-Host("Exportation des résultats vers PrinterQueueAudit.csv ...")
$ Files d'attente | Export-CSV PrinterQueueAudit.CSV

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.