POWERSHELL - vérifier la date de modif d'un fichier

Fermé
PLAYZIR - 1 avril 2022 à 14:57
brucine Messages postés 17028 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 octobre 2024 - 5 avril 2022 à 10:28
Bonjour je suis entrain de faire un script powershell qui doit m'aider pour mes sauvegardes
il doit:
-Si la sauvegarde a été faite ce jour:
-Me ressortir "la sauvegarde date bien de ce jour"
-Si la sauvegarde ne date pas de ce jour:
-Me ressortir "la sauvegarde ne date pas de ce jour, elle date du "21.03.2022""

Pour l'instant le script me ressort bien que la sauvegarde ne date pas de ce jour, et elle me ressort bien la date de la dernière sauvegarde. Mais si la sauvegarde a bien été éfféctuée ce jour, il ne me ressort rien... Je ne comprends pas pourquoi c'est pour cela que je viens demander de l'aide ici.
Merci !!



$date = get-date -format "yyyy-MM-dd"
$date_formatee_ordi = $date
$time = $item.LastWriteTime

$files= get-childitem "Y:\SAUVEGARDES" | 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
}
}
A voir également:

2 réponses

brucine Messages postés 17028 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 octobre 2024 2 415
Modifié le 2 avril 2022 à 15:20
Bonjour,

Je suis vieux, Powershell, ce n'est pas ma tasse de thé.

Une solution en batch si ça dépanne (avec le dossier G:\cadeaux et des fichiers test en E:\):


@echo off
CHCP 65001 >nul
FORFILES /P "G:\cadeaux" /d -00 /C "cmd /C if /I @isdir==true echo @fdate > E:\temp1.txt"
DATE /T > E:\temp2.txt
FOR /F "delims=" %%a IN ('type "E:\temp1.txt"') DO SET JOUROLD=%%a
FOR /F "delims=" %%g IN ('type "E:\temp2.txt"') DO SET JOURNEW=%%g

IF %JOUROLD%==%JOURNEW% ECHO Sauvegarde effectuée le %JOURNEW & GOTO :EOF
ECHO Sauvegarde effectuée le %JOUROLD%

DEL E:\temp1.txt
DEL E:\temp2.txt

pause >nul
:EOF
1
choubaka Messages postés 39399 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 3 août 2024 2 101
Modifié le 5 avril 2022 à 08:27
bonjour

Je vois que tu déclares tes variable $ok et $ko en dehors de ta boucle ... idem pour $time, tu l'initialises 2 fois ...
LastWriteTime est utilisé pour $Time mais également pour la sortie du pipe. ($_LastWriteTime)
Et c'est quoi cette variable $item ? où est-elle initialisée ?

0
brucine Messages postés 17028 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 3 octobre 2024 2 415
5 avril 2022 à 10:28
Bonjour,

Je suis tellement nul que je n'arrive pas à y faire fonctionner la condition if...else, donc "à mettre au régime" de manière plus propre.

Sous réserve que la source ait été modifiée (sans quoi on n'a pas de contrôle que la tâche de sauvegarde a bien été effectuée, mais dans le vide), on n'a pas besoin de faire une récursion à travers tous les fichiers: il suffit qu'un seul ait été modifié pour que la date de modification du dossier lui-même le soit:


if ($(gi c:\Users\bru\Desktop\bridge).LastWriteTime.ToString("dd-MM-yyyy") -lt (get-date).ToString("dd-MM-yyyy"))
{
Write-Host "dernière sauvegarde le" $(gi c:\Users\bru\Desktop\bridge).LastWriteTime.ToString("dd-MM-yyyy")
}
if ($(gi c:\Users\bru\Desktop\bridge).LastWriteTime.ToString("dd-MM-yyyy") -eq (get-date).ToString("dd-MM-yyyy"))
{
Write-Host "la sauvegarde date bien de ce jour"
}
0