POWERSHELL - vérifier la date de modif d'un fichier
PLAYZIR
-
brucine Messages postés 21755 Date d'inscription Statut Membre Dernière intervention -
brucine Messages postés 21755 Date d'inscription Statut Membre Dernière intervention -
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 !!
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:
- Powershell date fichier
- Fichier bin - Guide
- Fichier .dat - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
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:\):
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
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 ?
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 ?
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:
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"
}