none
Création de Script qui permet de comparer la date du jour et la date d'un fichier. RRS feed

  • Question

  • Bonjour a tous,

    Je souhaite créer un script qui me permet de comparer la date d'un fichier avec la date d'un PC. Au final le script m’enverra un mail avec un tableau qui liste les fichiers du répertoire et m'affichera si oui ou non la date est la même que celui du PC.

    Voici le début du Script :

    $date = get-date -format "yyyy-MM-dd" $date_formatee_ordi = $date $c= get-childitem "C:\test\" | Select Name, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}} $d = $c.LastWriteTime $d_formatee_fichier = $d $ok="la sauvegarde est ok" $ko="la sauvegarde est fausse" foreach($fichier in $c ) { if( $d_formatee_fichier -eq $date_formatee_ordi) { write-host $ok } else { write-host $ko } }

         
    Cependant je suis face a plusieurs problématique:

    - Ma boucle ne fonctionne pas car elle retourne la  même réponse Xfois (x= le nombre de fichier dans le répertoire). Cette réponse est la réponse du premier test.( la boucle fonctionne parfaitement quand il y a un seule fichier dans le répertoire)

    - Je ne sais pas comment récupéré le nom des fichiers qui passe dans le "vrai" ou "faux" de la boucle.

    Par avance je souhaite vous remerciez pour votre aide

    Bien cordialement

     
    jeudi 8 décembre 2016 19:32

Réponses

  • Bonjour,

    La variable LastWriteTime est capturé en dehors de la boucle foreach
    $d est figé pour le dernier fichier présent dans le répertoire et ne change pas pendant l'éxécution du foreach.

    Voici avec le $time corrigé, à l'intérieur de la boucle :


    $date = get-date -format "yyyy-MM-dd"
    $date_formatee_ordi = $date
    
    $files= get-childitem "C:\test\" | Select Name, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}} 
    
    $ok="dernière date d écriture '$time'"
    $ko="la sauvegarde ne date pas d aujourdhui"
    
    
    foreach($item in $files)
    {
    
    $time = $item.LastWriteTime
    
    if( $time -eq $date_formatee_ordi)
        {  
            write-host $ok
        }
    
       else
        {        
            write-host $ko    
        }
    }



    jeudi 8 décembre 2016 20:11

Toutes les réponses

  • Bonjour,

    La variable LastWriteTime est capturé en dehors de la boucle foreach
    $d est figé pour le dernier fichier présent dans le répertoire et ne change pas pendant l'éxécution du foreach.

    Voici avec le $time corrigé, à l'intérieur de la boucle :


    $date = get-date -format "yyyy-MM-dd"
    $date_formatee_ordi = $date
    
    $files= get-childitem "C:\test\" | Select Name, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}} 
    
    $ok="dernière date d écriture '$time'"
    $ko="la sauvegarde ne date pas d aujourdhui"
    
    
    foreach($item in $files)
    {
    
    $time = $item.LastWriteTime
    
    if( $time -eq $date_formatee_ordi)
        {  
            write-host $ok
        }
    
       else
        {        
            write-host $ko    
        }
    }



    jeudi 8 décembre 2016 20:11
  • Merci beaucoup pour votre réponse,

    Je vais maintenant chercher comment capturer le nom des éléments qui passent dans une boucle ou dans l'autre.

    jeudi 8 décembre 2016 20:20
  •  write-host $item.Name 
    jeudi 8 décembre 2016 20:52
  • merci beaucoup pour votre aide :)
    jeudi 8 décembre 2016 21:04
  • Voila ou je suis partis,

    function f_Mail($t) { $from="****" $to="*****" $subject="test" $body = '<font face ="segoe ui,calibri,verdana" size = "-1">' + $body + '</font>' $body += "<HTML><BODY><Table border=1 cellpadding=1 cellspacing=1 width=70% id=Header>" $body += "<p><br>Bonjour,<br><br> Vous trouverez ci joint un rapport de sauvegarde des serveurs d'impréssions et` des serveurs ********</p>" $body += "<TR> <TH><B><U><font color=""#5f9ea0"">Nom</font></U></B></TH> <TH><B><U><font color=""#5f9ea0"">Date</font></U></B></TH> <TH><B><U><font color=""#5f9ea0"">Sauvegarde</font></U></B></TH> </TR>" Foreach($o in $t) { $body +="<TR><TD>$($o.nom )</TD> <TD>$($o.date)</TD> <TD>$($o.sauvegarde)</TD></TR>" } $body += "</table>" $body += '<br><br><font face ="segoe ui,calibri,verdana" size = "-1.5"><b>' + "*****<br> Direction des Systèmes` d'Information<br>Service Infrastructures et Exploitation<br> **" + '</b></font>' Send-MailMessage -from $from ` -to $to ` -subject $subject ` -body $body -BodyAsHtml ` -smtpServer ******* ` -Encoding UTF8 } $date = get-date -format "yyyy-MM-dd" $date_formatee_ordi = $date $files= get-childitem "C:\test\" | Select Name, @{Name="LastWriteTime"; Expression={$_.LastWriteTime.ToString("yyyy-MM-dd")}} $t_obj = @() foreach($item in $files) { $obj = New-Object PSObject #$time = $item.LastWriteTime $obj | add-member -MemberType NoteProperty ` -name "nom" ` -value $item.Name $obj | add-member -MemberType NoteProperty ` -name "date" ` -value $item.LastWriteTime if( $item.LastWriteTime -eq $date_formatee_ordi) { $obj | add-member -MemberType NoteProperty ` -name "sauvegarde" ` -value $true } else { $obj | add-member -MemberType NoteProperty ` -name "sauvegarde" ` -value $false } $t_obj += $obj $obj = $null } f_Mail $t_obj

    Toutes les critiques sont bonnes a entendre :)

    vendredi 9 décembre 2016 20:37