2009-05-06 30 views
5

El siguiente script eliminará archivos en un directorio nombrado que tengan más de 14 días y escriba en un .txt con la ruta y los archivos eliminados (este script encontrado en otro foro ... acredite a shay) :Script de Powershell para eliminar archivos antiguos

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 

tengo 3 preguntas:

  1. -lt lo que es y lo que es y lo que es -le-gt? ¿Cuándo usaría cada uno?
  2. El script anterior solo borra el archivo ... ¿cómo puedo eliminar las carpetas también?
  3. El script anterior se basa en LastWriteTime .. ¿qué pasa con CreatedDate o LastAccessed vez?
+0

creo {! $. PSIsContainer -AND $ .lastWriteTime debe tener guiones para la variable de tuberías es decir {! _ $. PSIsContainer -AND $ _. LastWriteTime –

Respuesta

9

Ok, aquí vamos:

  1. -lt, -le -gt y somos operadores de comparación. Significa menos que, le significa menos o igual que, y gt significa mayor que.

  2. La eliminación de carpetas puede ser peligrosa si no se tiene control sobre lo que entra en ella. Puede tener problemas y tenga en cuenta la pérdida de datos. Puede eliminar carpetas utilizando el mismo cmdlet Remove-Item, simplemente jugando con sus opciones. Compruebe este artículo, que tiene grandes instrucciones sobre cómo lograrlo: http://searchwindowsserver.techtarget.com/generic/0,295582,sid68_gci1275887,00.html

  3. Por lo general, los archivos que se han sentado allí por un tiempo, y LastWriteTime CreatedDate y LastAccessTime será el mismo. En un archivo de solo lectura, como una DLL, LastAccessTime podría ser más nuevo que los otros dos. En un archivo de lectura/escritura (como el archivo pst de Outlook), WriteTime y AccessTime pueden ser lo mismo. Básicamente, eso depende totalmente de ti. Funcionan del mismo modo que LastWriteTime. ¡Considere la naturaleza de los archivos que desea eliminar y continúe!

+1

Para ser más específicos, la eliminación de la condición las carpetas de la lista son las siguientes:! $. PsIsContainer – JasonMArcher

3

Los -lt -le y -gt son operadores de comparación en lugar de <, < =,>. Escriba "help about_Comparison_Operators" en el símbolo del sistema de PowerShell para obtener detalles sobre cada tipo y el motivo por el que los usa en lugar de los que conoce de otros idiomas. Para eliminar carpetas, debe eliminar la parte ! $. PsIsContainer AND del filtro where. Esto elimina todos los elementos de las listas que son directorios.

No estoy seguro de qué es lo que persigue con la pregunta "¿qué pasa con CreatedDate o LastAccessed time" pero puede simplemente usar estas propiedades de forma similar a LastWriteTime, pero debe decidir la lógica que intenta lograr .

Cuestiones relacionadas