2009-05-06 8 views
5

Il seguente script eliminerà i file in una directory denominata che hanno più di 14 giorni e scrivono in un .txt con il percorso e i file cancellati (trovato questo script su un altro forum..credit a shay) :Script Powershell per eliminare i vecchi file

dir c:\tmp -recurse | where {!$_.PsIsContainer -AND $_.lastWriteTime -lt (Get-Date).AddDays(-14) } | select LastWriteTime,@{n="Path";e={convert-path $_.PSPath}} | tee c:\oldFiles.txt | Remove-Item -force -whatif 

ho 3 domande:

  1. ciò che è -lt e ciò che è e ciò che è -le-gt? Quando dovrei usare ciascuno
  2. Lo script sopra cancella solo il file ... come posso eliminare anche le cartelle?
  3. Lo script precedente si basa su LastWriteTime .. che dire di tempo CreatedDate o LastAccessed?
+0

penso {! $. PsIsContainer -E $ .lastWriteTime dovrebbe avere sottolineatura per la variabile gasdotto cioè {! $ _. PsIsContainer -E $ _. LastWriteTime –

risposta

9

Ok, qui andiamo:

  1. -lt, -le e -gt siamo operatori di confronto. Significa meno di, le significa minore o uguale a, e gt significa maggiore di.

  2. La rimozione delle cartelle può diventare pericolosa se non si ha il controllo su ciò che viene contenuto. Potresti avere problemi e ti preghiamo di essere consapevole della perdita di dati. Puoi eliminare le cartelle usando lo stesso cmdlet Remove-Item, semplicemente giocando con le sue opzioni. Controllare questo articolo, ha grandi istruzioni su come realizzarla: http://searchwindowsserver.techtarget.com/generic/0,295582,sid68_gci1275887,00.html

  3. Di solito, per i file che sono stati seduti lì per un po ', e LastWriteTime CreatedDate e LastAccessTime sarà lo stesso. In un file di sola lettura, come una DLL, LastAccessTime potrebbe essere più recente rispetto agli altri due. In un file di lettura/scrittura (come il file pst di Outlook), WriteTime e AccessTime potrebbero essere uguali. Fondamentalmente, questo dipende totalmente da te. Funzionano allo stesso modo di LastWriteTime. Considerare la natura dei file che si desidera eliminare e andare avanti!

+1

per essere più precisi, la condizione rimozione le cartelle dalla lista sono queste:! $. PsIsContainer – JasonMArcher

3

Il -lt -le e -gt sono operatori di confronto invece di <, < =,>. Digitare "help about_Comparison_Operators" al prompt dei comandi di PowerShell per i dettagli su ciascun tipo e il motivo dell'utilizzo di questi invece di quelli che si hanno familiarità con altre lingue.

Per eliminare anche le cartelle è necessario rimuovere ! $. PsIsContainer E parte del filtro dove. Questo sta rimuovendo tutti gli elementi dagli elenchi che sono directory.

Non sono sicuro di quello che cerchi con la domanda "che dire di CreatedDate o LastAccessed time" ma puoi semplicemente utilizzare queste proprietà in modo simile a LastWriteTime ma devi decidere la logica che stai cercando di raggiungere .