2013-06-28 10 views
5

Codice in quanto è al momentoutilizzando Get-ChildItem per ottenere un elenco dei file modificati negli ultimi 3 giorni

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

Essenzialmente quello che sto cercando di fare è ottenere una lista di tutti i file PST nella cartella sopra basata sulla loro più recente di 3 giorni. Mi piacerebbe quindi contare i risultati. Il codice di cui sopra non errore, ma riporta zero risultati (ci sono sicuramente i file PST nella cartella che sono più recenti di tre giorni Qualcuno ha qualche idea

+4

cambiamento '-lt' in' -gt' per il file modificato negli ultimi 3 giorni da ora .. –

+0

Una nota per gli altri chiedendo per questo che stiamo filtrando dopo aver catturato tutti i risultati piuttosto che utilizzare il '-Filter 'parametro. 'Filter' su questo cmdlet prende una maschera contro cui viene confrontato il' Path'; non consente di filtrare su altre proprietà come ci si potrebbe aspettare dall'aver utilizzato questo parametro su altri cmdlet. – JohnLBevan

risposta

16

provare questo:.?

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

volevo basta aggiungere questo come un commento alla risposta precedente, ma non posso. ho provato la risposta Dave Sexton s' ma ha avuto problemi se il conteggio è stato 1. Ciò impone una matrice, anche se un oggetto viene restituito.

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

Ancora non restituisce zero se vuoto, ma il test '-lt 1' funziona.

+0

Per forzare un array come oggetto di ritorno usare @ piuttosto che [System.Object []]. Puoi anche usare [array] come un'altra alternativa. –

1

Ecco un aggiornamento minore per la soluzione fornita da Dave Sexton. Molte volte hai bisogno di più filtri. Il parametro Filter può prendere una sola stringa mentre il parametro -Include può assumere una stringa. se si dispone di un grande albero di file ha senso anche per ottenere solo la data da confrontare con una volta, non per ogni file. Ecco la mia versione aggiornata:

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

Molto simile alle risposte precedenti, ma il è dalla directory corrente, guarda tutti i file e solo per quelli che sono 4 giorni di età. Questo è ciò di cui avevo bisogno per la mia ricerca e le risposte di cui sopra sono state tutte molto utili. Grazie.

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

Lo stesso comando che non usa il? alias: 'Get-ChildItem -Path. -Recurse | Where-Object {$ _. LastWriteTime -gt (Get-Date) .AddDays (-4)} ' –

Problemi correlati