Question Comparer la date d'un fichier à l'heure systeme

Plus d'informations
il y a 13 ans 8 mois #12160 par rodriguez
Bonjour,

Je souhaiterais récupérer la date de modification d'un fichier et le comparer à l'heure systeme et si ce delta dépasse une heure envoyer une alerte mail.

POur la partie email pas de soucis ma problématique c'est d'arriver à faire la comparaison.

voici ce que j'ai pu récupérer pour avoir la date du des fichiers...

$date = Get-ChildItem -recurse -path $path | select lastwritetime | where {$_.lastwritetime -gt $datemodified}


que je compare a la date systeme format compréssé ppour le meme format:
Get-Date -Format g

Maintenant comment faire la comparaison et dire si > 1h00 alors alerte.

Merci pour toutes aides.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 8 mois #12161 par Matthew BETTON
Bonsoir,

Maintenant comment faire la comparaison et dire si > 1h00 alors alerte.


La solution doit se trouver dans New-TimeSpan.

[code:1]Get-Help New-TimeSpan -Full[/code:1]

Il faudra comparer le résultat de New-TimeSpan avec 1H via l'opérateur de comparaison \"-gt\".

Cela doit ressembler à ça :

[code:1]
(New-TimeSpan -Start ($_.lastwritetime) -End $datemodified).Hours -gt 1[/code:1]

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 22/06/12 18:23

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 8 mois #12162 par Matthew BETTON
Une remarque complémentaire :

[code:1]$date = Get-ChildItem -recurse -path $path | select lastwritetime | where {$_.lastwritetime -gt $datemodified}[/code:1]


Tu as nommé ta variable $date mais tu devrais récupérer, via Get-ChildItem des fichiers ou des répertoires (objets de type System.IO.FileInfo et System.IO.DirectoryInfo).

A tester :

[code:1]$Files = Get-ChildItem -recurse -path $path | Where-Object {(New-TimeSpan -Start ($_.lastwritetime) -End $datemodified).Hours -gt 1}[/code:1]

$Files contiendra ainsi la liste des fichiers concernés ...<br><br>Message édité par: Matthew BETTON, à: 22/06/12 18:32

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 8 mois #12163 par Matthew BETTON
En fait, je n'avais pas fini :P

que je compare a la date systeme format compréssé ppour le meme format:
Get-Date -Format g


La propriété LastWriteTime est un objet du type System.DateTime.

Le Cmdlet New-TimeSpan attend quand à lui ce même type d'objet ( &lt;datetime&gt; ) .

Pour pouvoir la comparer avec la date système, n'utilise pas le format compressé, comme tu l'indiquais, mais plutôt un simple Get-Date.

[code:1]Get-Date -Format g[/code:1]

renvoie un System.String et non pas un System.DateTime<br><br>Message édité par: Matthew BETTON, à: 22/06/12 23:20

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 8 mois #12182 par rodriguez
Merci Matthew pour tes pistes.

De mon côte je me suis trompé avec:

$date = Get-ChildItem -recurse -path $path | select lastwritetime | where {$_.lastwritetime -gt $datemodified}

car la résultante est un sting qui n'est pas possible comparer avec la fonction get_date.

Je me suis retourné vers ceci:

dir $path -recurse | where { $_.lastWriteTime -gt (Get-Date).Addhours(-1) } | fname1

par cette instruction j’espérais lancer la fonction fname si la lastwritetime est superieur à 1.

mais volai quoi que l'on mette en valeur apres addhours la fonction se lance.

et il semble que $_.lastWriteTime reste vide expliquant mon resultat.

merci pour votre aide.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 8 mois #12190 par Matthew BETTON
La fonction fname doit accepter les informations renvoyées par le pipeline et donc avoir été écrite pour cela (fonction avancée, blocs begin / process / end ...)

Peux-tu poster ici le code de cette fonction ?

Via cette ligne :

[code:1]
dir $path -recurse | where { $_.lastWriteTime -gt (Get-Date).Addhours(-1) }[/code:1]

Tu récupères les fichiers dont la date de dernière modification est supérieure à (la date d'aujourd'hui moins une heure). Effectivement, tu devrais récupérer les fichiers qui ont été modifiés il y a moins d'une heure.

Si aucun fichier n'a été modifié il y a moins d'une heure, ce code ne renverra rien.

et il semble que $_.lastWriteTime reste vide expliquant mon resultat.


?

Peux tu me dire ce que tu récupères via l'exécution de :

[code:1]Get-ChildItem $path -recurse | Select-Object FullName, lastWritetime[/code:1]

?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.091 secondes
Propulsé par Kunena