2016-09-01 1 views
0

Я написал небольшой скрипт для поиска по всем папкам на одном из моих серверов, чтобы найти все файлы старше 3 лет.Powershell Compress-Archive по старым файлам

Однако я хочу написать все файлы, соответствующие критериям, в архив с тем же именем, и я несколько зациклен на том, как это можно достичь.

Вот мой код до сих пор ...

$limit = (Get-Date).AddYears(-3) 
$Path = "L:\" 
$Path2 = "archive.zip" 

$PathB = Get-ChildItem -Path $Path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $Limit } 
Compress-Archive -Path $Pathb -DestinationPath {$Path + $Path2} 

То, что я пытаюсь добиться в основном;

В каталоге

> l:\ 

Есть 3 файлов старше 3-х лет ...

Red.PDF Hello.Doc me.jpg

Я хочу возьмите эти три файла и добавьте их в архив;

L:\Archive-ddmmyyyy.zip 

В идеальном мире имен все эти файлов, которые были заархивированы будет написано/прилагаемых к CSV-файл на L: \ под названием archivedlog.csv содержит имя файла и дату его и дата его архивирования.

Заключительный цикл затем удалит исходные три файла и оставит архив неповрежденным. В этой последней части я думаю, что могу достичь других элементов не так много.

Что я до сих пор нахожу в старых файлах, но при сжатии указывается, например, что «Путь« Red.PDF »либо не существует, либо не является допустимым путём системного файла.

Это может быть, однако из-за плохое форматирование файлов на сервере числе сохраненных документов, на самом деле в формате ...

«Mrs P Simpson письмо 12.07.2012.docx либо не существует или не является допустимым пути к файловой системе. '

Угадайте, что из-за повторения '.' в имени файла это может вызвать проблемы, но я для одного не знаю ...

Может ли кто-нибудь указать мне в правильном направлении с этим?

Я должен был сказать, что цель состоит в том, чтобы это переписывать каждый каталог в L: \, создавая архив для всех файлов в каждом подкаталоге, входящем в эту категорию.

С наилучшими пожеланиями

R

ответ

1

Заменить

Compress-Archive -Path $Pathb -DestinationPath {$Path + $Path2} 

С

Compress-Archive -Path $PathB.FullName -DestinationPath {$Path + $Path2} 

В противном случае Compress-Archive будет ожидать файл находиться в том же каталоге.

Редактировать Проверьте переключатель пути -LiteralPath, если вы ожидаете работать с именами файлов, которые имеют странные символы. . в порядке хотя.

0

Благодаря массово gms0ulman, ваша помощь поставить меня на правильный путь ...
Я делюсь, что я наконец придумал она должна помочь всем в будущем,

## Sets the time scale in years for files older than that we want to delete. 
$limit = (Get-Date).AddYears(-3) 
## Sets the starting path for the process 
$Path = "L:\" 
## Sets the save file name 
$Path2 = "archive + $(get-date -f dd-MM-yyyy).zip" 
## Sets the archive logfile location 
$write = "l:\archivelog-donotremove.csv" 

## Runs through each file to identify files in scope and writes to object 
$PathB = Get-ChildItem -Path $Path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $Limit } 
## Adds all objects to zip file 
Compress-Archive -Path $Pathb.FullName -DestinationPath "$Path + $Path2" -Force 


## Appends all data to the log file that has been archived 
$PathB | export-csv -Append -Path $write -NoTypeInformation -Force 

## Deletes all non compressed files that were identified 
$Removal = Get-ChildItem -Path $Pathb.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $Limit } | foreach { $_.Delete()} 
Смежные вопросы