Serveur d'impression

Script PowerShell pour l'audit des serveurs d'impression Windows 2003 et 2008 / R2 – Bien choisir son serveur d impression

Le 21 juillet 2019 - 3 minutes de lecture

# @ ==========================================

# @ Nom du script: Get-PrintServerAudit.ps1
# @ Auteur: Praveenraj T
# @ ==========================================
# @
# @
# @
# @ ==========================================

#Définir le chemin de sortie et formater le fichier de sortie ici…

$ outfilename = ”Entrez le chemin du fichier de sortie ici printlog ”+ (get-date -Format ddMMyyyHHmmss) +". csv "
Write-Output “PrintServerName, PrintServerOs, Date, ID du travail d'impression, ID utilisateur, Nom du PC client, Nom de l'imprimante, Nom de la file d'attente, Nom du document, Taille du travail d'impression en octets, Nombre de pages pour une copie, Nombre de copies, Nombre total de pages” | Out-File $ outfilename -Encoding ASCII

################# La fonction GetStatusCode commence ici ##################

Fonction GetStatusCode

Param ([int] $ StatusCode)
commutateur ($ StatusCode)

0 “succès”
11001 «Tampon trop petit»
11002 “Destination réseau inaccessible”
11003 “Hôte de destination inaccessible”
11004 “Protocole de destination inaccessible”
11005 “Port inaccessible”
11006 «Pas de ressources»
11007 “Mauvaise option”
11008 “Erreur matérielle”
11009 «Paquet trop gros»
11010 “Demande expirée”
11011 «Requête incorrecte»
11012 «Bad Route»
11013 “Transit expiré par TimeToLive”
11014 “Réassemblage TimeToLive expiré”
11015 “Problème de paramètre”
11016 “Source Quench”
11017 “Option trop grosse”
11018 «Mauvaise destination»
11032 “IPSEC en négociation”
11050 “Échec général”
default “Failed”

############# Fonction GetStatusCode se termine ici ###########################

############# Get-windows2003serverprintlogs se termine ici #######################

Fonction Get-windows2003serverprintlogs sélectionnez Nom d'utilisateur, Heure générée, Message

# Utilisez des expressions régulières pour obtenir des informations utiles
foreach ($ éléments dans $ événements)

# Si le nom d'utilisateur n'est pas vide
if ($ items.Username) out-file $ outfilename -Encoding ASCII -Append
# $ TimeGenerated = $ UserName = $ DomainName = $ DocumentName = $ PrintQueue = $ Port = $ Size = $ Pages = $ null

############# Get-windows2003serverprintlogs se termine ici #######################

############# Get-windows2008serverprintlogs commence ici #######################

Fonction Get-windows2008serverprintlogs

$ starttime = (Get-Date) .Addhours (-1)
$ osversion = Get-WmiObject -Class win32_operatingsystem -ComputerName $ server
$ PrintEntries = Get-WinEvent -ComputerName $ server -FilterHashTable @ LogName = "Microsoft-Windows-PrintService / Operational"; ID = 307; Heure de début = $ heure de début
$ PrintEntriesNumberofCopies = Get-WinEvent -ErrorAction SilentlyContinue -ComputerName $ server -FilterHashTable @ ProviderName = "Microsoft-Windows-PrintService"; StartTime = $ starttime; ID = 805

ForEach ($ PrintEntry in $ PrintEntries) Where-Object $ _. TimeCreated -le $ StartDate_Time -et $ _. TimeCreated -ge ($ StartDate_Time – (New-Timespan -second 5)) -et $ _. Message -eq "Rendu du travail $ PrintJobId."
if ($ PrintEntryNumberofCopies)
# récupérer les champs restants du contenu du journal des événements
$ entry = [xml]$ PrintEntryNumberofCopies.ToXml ()
$ NumberOfCopies = $ entry.Event.UserData.RenderJobDiag.Copies
# certains pilotes d'imprimante défectueux signalent toujours 0 copie pour chaque travail d'impression; émettez un avertissement afin que cela puisse faire l'objet d'une enquête supplémentaire et définissez le nombre de copies égal à 1 dans ce cas, afin de deviner le nombre exact de copies

# calculer le nombre total de pages pour le travail d'impression entier
$ TotalPages = [int]$ PrintPagesOneCopy * [int]$ NumberOfCopies

$ Output = $ PrintServername + “,” + $ PrintServerOS + “,” + $ StartDate_Time.ToString () + “,” + $ PrintJobId + “,” + $ UserName + “,” + $ ClientPCName + “,” + $ PrinterName + “,” + $ PrintQueueName + ”,` ”” + ($ DocumentName -replace “,”, “_”) + “` ”,” + $ PrintSizeBytes + “,” + $ PrintPagesOneCopy + “,” + $ NumberOfCopies + “,” + $ TotalPages
$ output

############# Get-windows2008serverprintlogs se termine ici #######################
############ Exécution du script en appelant le nécessaire #########################

$ servers = Get-Content “E: Scripts CmdLine JOURNAL DES EVENEMENTS COMBINER SERVEUR D'IMPRESSION PrintServers.txt”

foreach ($ serveur dans $ serveurs)

$ pingStatus = Get-WmiObject -Query “Sélectionnez * dans win32_PingStatus où Address = '$ serveur'”

if ($ pingStatus.StatusCode -eq 0)

$ Status = GetStatusCode ($ pingStatus.StatusCode)
write-host “Le serveur $ est accessible”

$ osversion = Get-WmiObject -Class win32_operatingsystem -ComputerName $ server
if ($ osversion.caption -like “* serveur 2003 *”)

Get-windows2003serverprintlogs

autre

Get-windows2008serverprintlogs

autre

$ Status = “Le serveur $ est inaccessible”
$ status

####################### Script se termine ici ######################## ##

Commentaires

Laisser un commentaire

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