web-dev-qa-db-fra.com

Utiliser Get-childitem pour obtenir une liste des fichiers modifiés au cours des 3 derniers jours

Code tel qu'il est en ce moment

get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |

Essentiellement, ce que j'essaie de faire est d’obtenir une liste de tous les fichiers PST du dossier ci-dessus, car ils datent de moins de 3 jours. J'aimerais ensuite compter les résultats. Le code ci-dessus ne fait pas d'erreur, mais ne renvoie aucun résultat (il y a définitivement des fichiers PST plus récents que trois jours. Quelqu'un a une idée?

10
Trinitrotoluene

Essaye ça:

(Get-ChildItem -Path c:\pstbak\*.* -Filter *.pst | ? {
  $_.LastWriteTime -gt (Get-Date).AddDays(-3) 
}).Count
29
Dave Sexton

Très similaire aux réponses précédentes, mais provient du répertoire en cours, examine tous les fichiers et uniquement ceux qui datent de 4 jours. C’est ce dont j’avais besoin pour mes recherches et les réponses ci-dessus ont été très utiles. Merci.

Get-ChildItem -Path . -Recurse| ? {$_.LastWriteTime -gt (Get-Date).AddDays(-4)}
11
LReeder14

Voici une mise à jour mineure de la solution fournie par Dave Sexton. Plusieurs fois, vous avez besoin de plusieurs filtres. Le paramètre Filter ne peut prendre qu'une seule chaîne, tandis que le paramètre -Include peut contenir un tableau de chaînes. Si vous avez une grande arborescence de fichiers, il est également logique de ne comparer la date qu'avec une seule fois, et non pour chaque fichier. Voici ma version mise à jour:

$compareDate = (Get-Date).AddDays(-3)    
@(Get-ChildItem -Path c:\pstbak\*.* -Filter '*.pst','*.mdb' -Recurse | Where-Object { $_.LastWriteTime -gt $compareDate}).Count
2
Yooakim

Je voulais juste ajouter ceci comme commentaire à la réponse précédente, mais je ne peux pas. J'ai essayé la réponse de Dave Sexton mais j'ai eu des problèmes si le compte était 1. Cela force un tableau même si un objet est retourné.

([System.Object[]](gci c:\pstback\ -Filter *.pst | 
    ? { $_.LastWriteTime -gt (Get-Date).AddDays(-3)})).Count

Il ne renvoie toujours pas zéro s'il est vide, mais le test '-lt 1' fonctionne. 

1
Jonman364