none
script audit d'impression RRS feed

  • Question

  • Bonjour tout le monde,

    je sollicite votre aide pour modifier le script qui audit le taux d'impression par personne,

    le script est bien opérationnel, il audit le taux d'impression par jour et il me donne a chaque fois un nouveau fichiers

    la modification que je veux apporté c'est que je veux qu'il me donne un seul fichiers html qui comporte tous les impressions effectué par mois ,

    plus clair, il me créer a chaque mois un fichiers et qu'il se remplit avec le taux d'impression date de se mois

    je suis débutant en PS, j'efectue des modification et je créer des simple script, je me suis bloqué,

    #VARIABLES
    #---------
    
    $PrintServer = "."
    
    #Output File
    $Date = (get-date) - (new-timespan -day 1)
    $OutputPath = "c:\audit\"
    #$csvfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM-dd") + ".csv"
    #if ((Test-Path -Path $csvfile) -eq $true) {remove-item $csvfile}
    #write-output "Server,Date,Full Name,Client,Printer Name,Print Size,Pages,Document" | Out-File $csvfile
    $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM-dd") + ".html"
    if ((Test-Path -Path $htmlfile) -eq $true) {remove-item $htmlfile}
    
    #on collecte les evenements dans le journal printservice
    #------------------------------------------------------
    
    $strOutput = ""
    $filterxml = '<QueryList>
    		<Query Id="0" Path="Microsoft-Windows-PrintService/Operational">
    		<Select Path="Microsoft-Windows-PrintService/Operational">*[System[(EventID=307)]]</Select>
    		</Query>
     	     </QueryList>'
    $EventLog = Get-WinEvent -ea SilentlyContinue -Filterxml $filterXml #ajouter -computername XXX si le script n'est pas lancé sur le serveur même
    
    $strOuput = '<lpheader><html><head><title>Audit Active Directory</title></head>
    		<body><h1>Audit Print Server</h1>
    		<TABLE BORDER="1" style="font-family: Tahoma; font-size: 8pt" WIDTH=95% >   
    		<tr>
    			<th VALIGN="left">DATE</th>
    			<th VALIGN="left">Utilisateurs</th>
    			<th VALIGN="left">Nom complet</th>
    			<th VALIGN="left">Fichiers</th>
    			<th VALIGN="left">Imprimantes</th>
    			<th VALIGN="left">nombre de Page</th>
    		</tr>
    		</lpheader>
    		<lpbody>'
    write-output $strouput | out-file $htmlfile -append
    
    ForEach ($LogEntry in $EventLog)
    { 
    	#recupere les jobs
    	$time = $LogEntry.TimeCreated
    	$entry = [xml]$LogEntry.ToXml() 
    	$docName = $entry.Event.UserData.DocumentPrinted.Param2
    	$Username = $entry.Event.UserData.DocumentPrinted.Param3
    	$Computer = $entry.Event.UserData.DocumentPrinted.Param4
    	$PrinterName = $entry.Event.UserData.DocumentPrinted.Param5
    	$PrintSize = $entry.Event.UserData.DocumentPrinted.Param7
    	$PrintPages = $entry.Event.UserData.DocumentPrinted.Param8
    
    	#on recupere le nom complet de l'utilisateur dans l'AD
    	if ($UserName -gt "")
    	{
    		$DirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher
    		$LdapFilter = "(&(objectClass=user)(samAccountName=${UserName}))"
    		$DirectorySearcher.Filter = $LdapFilter
    		$UserEntry = [adsi]"$($DirectorySearcher.FindOne().Path)"
    		$DisplayName = $UserEntry.displayName
    	}
     
    	#on ecris dans le fichier csv
    	$strOutput = "<tr>
    			<td><tt>$time</tt></td>
    			<td><tt>$Username</tt></td>
    			<td><tt>$DisplayName</tt></td>			
         		<td><tt>$docName</tt></td>
         		<td><tt>$PrinterName</tt></td>	
         		<td><tt>$PrintPages</tt></td>
       		      </tr>"
    
    
    	#$PrintServer+ "," +$time.ToString()+ "," +$DisplayName+ "," +$Computer+ "," +$PrinterName+ "," +$PrintSize+ "," +$PrintPages+ "," +$docName
    	write-output $strOutput | Out-File $htmlfile -append  
    }
    
    
    $finhtml= '</lpbody>
    	   <lpfooter>
    	   </table>
               </body>
               </html>
               </lpfooter>'
    write-output $finhtml | out-file $htmlfile -append

    Pouvez-vous svp me donner un petit aide,

    je vous remercie d'avance


    mardi 14 juin 2016 06:07

Réponses

  • Bonjour,

    merci pour ton retour, en faite je viens de le trouver elle été sous mes yeux :) 

    j'ai du remplacer les lignes :

    #Output File
    $Date = (get-date) - (new-timespan -day 1)
    $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM-dd") + ".html"

    par:

    $Date = Get-Date -uformat %Y_%M
    $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM") + ".html"

    Merci encore pour ton retour

    • Marqué comme réponse nelbouazzaoui mercredi 15 juin 2016 06:00
    mercredi 15 juin 2016 06:00

Toutes les réponses

  • $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM-dd") + ".html"
    if ((Test-Path -Path $htmlfile) -eq $true) {remove-item $htmlfile}

    Si j'ai bien compris c'est la ligne "IF" qui ne fonctionne pas.

    Tel que je lis le script, la boucle if tente de supprimer le fichier du jour...

    Quand je travail avec les dates dans mon nom de fichier j'utilise quelque chose comme ca :

    $i=gci $outputPath
    
    foreach ($o in $i) {
    
    	#Il est possible de modifier la valeur entre () dans le addDays pour plus de rétention   
    
        If (($o.LastWriteTime) -le ($date.addDays(-1))) {
    
            Remove-Item ($outputPath + ($o.Name)) -Force
        }
    }
    Mais il y a surement quelqu'un de plus avancé qui peut te proposer quelque chose de moins lourd :)


    • Marqué comme réponse nelbouazzaoui mercredi 15 juin 2016 05:59
    • Non marqué comme réponse nelbouazzaoui mercredi 15 juin 2016 06:00
    mardi 14 juin 2016 09:04
  • Bonjour,

    merci pour ton retour, en faite je viens de le trouver elle été sous mes yeux :) 

    j'ai du remplacer les lignes :

    #Output File
    $Date = (get-date) - (new-timespan -day 1)
    $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM-dd") + ".html"

    par:

    $Date = Get-Date -uformat %Y_%M
    $htmlfile = $OutputPath + "Printing Audit - " + (Get-Date).ToString("yyyy-MM") + ".html"

    Merci encore pour ton retour

    • Marqué comme réponse nelbouazzaoui mercredi 15 juin 2016 06:00
    mercredi 15 juin 2016 06:00