Скрипт Powershell для удаления старых файлов - PullRequest
5 голосов
/ 06 мая 2009

Следующий скрипт удалит файлы в именованном каталоге старше 14 дней и запишет в .txt путь и файлы, которые были удалены (найден этот скрипт на другом форуме .. кредит для shay):

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

У меня 3 вопроса:

  1. Что такое -lt и что такое -le и что такое -gt? Когда бы я использовал каждый
  2. Сценарий выше только удаляет файл ... как я могу также удалить папки?
  3. Приведенный выше сценарий основан на LastWriteTime .. как насчет CreatedDate или LastAccessed времени?

Ответы [ 2 ]

9 голосов
/ 06 мая 2009

Хорошо, поехали:

  1. -lt, -le и -gt - операторы сравнения. lt означает меньше чем, le означает меньше или равно чем, а gt означает больше чем.

  2. Удаление папок может стать опасным, если у вас нет контроля над тем, что в нем находится. У вас могут быть проблемы и, пожалуйста, помните о потере данных. Вы можете удалять папки, используя тот же командлет Remove-Item, просто играя с его параметрами. Проверьте эту статью, в ней есть отличные инструкции о том, как этого добиться: http://searchwindowsserver.techtarget.com/generic/0,295582,sid68_gci1275887,00.html

  3. Обычно для файлов, которые находились там некоторое время, LastWriteTime и CreatedDate и LastAccessTime будут одинаковыми. В файле только для чтения, таком как DLL, LastAccessTime может быть новее двух других. В файле для чтения / записи (например, в pst-файле outlook) WriteTime и AccessTime могут совпадать. По сути, это полностью ваше дело. Они работают так же, как LastWriteTime. Подумайте о природе файлов, которые вы хотите удалить, и продолжайте!

3 голосов
/ 06 мая 2009

-lt -le и -gt являются операторами сравнения вместо <, <=,>. Введите " help about_Comparison_Operators " в командной строке powershell для получения подробной информации о каждом типе и причинах их использования вместо тех, с которыми вы знакомы по другим языкам.

Для удаления папок также необходимо удалить ! $. PsIsContainer AND часть фильтра where. Это удаляет все элементы из списков, которые являются каталогами.

Я не уверен, что вам нужно с вопросом «как насчет CreatedDate или LastAccessed time», но вы можете просто использовать эти свойства аналогично LastWriteTime, но вам нужно определиться с логикой, которую вы пытаетесь достичь.

...