19 апр. 2012 г.

Удаление и архивирование файлов в Windows 2003 с помощью PowerShell

Модифицировал предыдущий скрипт.

Теперь он считывает из текстового файла маски файлов, которые надо заархивировать и удалить, затем делает своё черное дело :)

Единственный косяк, который пока не понял как устранить - архив уже должен существовать и быть архивом... Т. е. защиты от дурака не получилось у меня. Функция New-Item или как-то так создает файл, но текстовый - и это не подходит.

Вначале идет часть объявления, где в переменные заносятся все пути (чтобы легче было менять "под себя"), затем идет архивирование (если оно вообще нужно), а затем удаление.


####### define parameters
#----- get current date ----#
$Now = Get-Date
#----- define amount of days ----#
$Days = "10"
#----- define folder where files are located ----#
$TargetFolder = "C:\gb\QuoteServer"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)
#----- define delete list file path
$Del_List = "c:\scripts\files.txt"
#----- define files fore archiving list file path ---#
$Arch_List = "c:\scripts\archive.txt"
#----- define archive file path - this file MUST exist! ---#
$Arch_Path = "c:\scripts\test.zip"
####### archiving part
foreach ($_ in Get-Content $Arch_List)
{
$Files = Get-Childitem $TargetFolder -Include $_ -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
    {
    if ($File -ne $NULL)
        {
        write-host "Archiving File $File" -ForegroundColor "Green"
        $ZipFile = (new-object -com shell.application).NameSpace($Arch_Path)
  $ZipFile.CopyHere($_.fullname)
        }
    else
        {
        Write-Host "No more files to archive!" -foregroundcolor "Green"
        }
    }
}

####### deleting part
foreach ($_ in Get-Content $Del_List)
{
$Files = Get-Childitem $TargetFolder -Include $_ -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
foreach ($File in $Files)
    {
    if ($File -ne $NULL)
        {
        write-host "Deleting File $File" -ForegroundColor "DarkRed"
        Remove-Item $File.FullName | out-null
        }
    else
        {
        Write-Host "No more files to delete!" -foregroundcolor "Green"
        }
    }
}

Содержимое файлов со списками примерно такого формата:

B*.txt
*.dll
Del*f.doc

и т. п.