Удаление файлов с помощью скрипта PowerShell
У меня есть сценарий в PowerShell, который сканирует каталог папок, которые названы в соответствии со следующим соглашением: ггггммдд. Он сканирует каталог и находит все папки, которые являются текущими и имеют возраст до одной недели, а затем копирует их в другой каталог. После того, как он скопирует их в другой каталог, я хотел бы, чтобы он удалил папки в новом каталоге, названные таким же образом и которые старше 18 месяцев. Будет ли простой способ сделать это? Я вставил скрипт ниже.
$targetdirectory = "\\DPR320-W12-1600\PRTG"
$sourcedirectory = "C:\Users\Public\Documents\PRTG Traffic Grapher"
$todaysdate=get-date
$minusoneweek=$todaysdate.adddays(-7)
$minusdate=($minusoneweek.Month).tostring(),($minusoneweek.day).tostring(),($minusoneweek.year).tostring()
$todaysdatestring=($todaysdate.Month).tostring(),($todaysdate.day).tostring(),($todaysdate.year).tostring()
$oldfilename=$minusdate[0]+$minusdate[1]+$minusdate[2]+" backup"
$newfilename=$todaysdatestring[0]+$todaysdatestring[1]+$todaysdatestring[2]+" backup"
Get-ChildItem $sourcedirectory\config | Where-Object {
$_.PsIsContainer -and
$_.BaseName -match '\d{6}' -and
([DateTime]::ParseExact($_.BaseName, 'yyyyMMdd', $null) -gt (Get-Date).AddDays(-7))
} |Copy-Item -Recurse -Force -Destination $targetdirectory\$oldfilename\config
Copy-Item -Force $sourcedirectory\config.csv -Destination $targetdirectory\$oldfilename
Copy-Item -Force $sourcedirectory\config.prtg -Destination $targetdirectory\$oldfilename
rename-item $targetdirectory\$oldfilename $newfilename
2 ответа
Основываясь на вашем обсуждении с FoxDeploy: Это перебирает $YourDirectory и проверяет, соответствует ли имя дате, которая старше 18 месяцев. Использовал это для моей собственной очистки, за исключением того, что у меня есть имена в точечном формате.
$CleanupList = Get-ChildItem $YourDirectory
$Threshold = (get-date).AddMonths(-18)
foreach ($DirName in $CleanupList)
{
If (([datetime]::ParseExact($DirName.BaseName,'yyyyMMdd',$null)) -lt $Threshold)
{
Remove-Item $DirName.FullName -Force -Recurse
}
}
Если предположить, $targetDirectory
содержит файлы, которые вы хотите удалить (те, кто старше 18 месяцев), просто добавьте это в конец вашего скрипта:
#resolve this day, 18 months ago
$18Months = (get-date).AddMonths(-18)
#get the name in the right format (i.e. 20141224)
$18MonthString = get-date -Date $18Months -UFormat "%Y%m%d"
#find the files with a name like this and delete them
$OldPrtgFiles = dir $targetDirectory | Where Name -like "$18MonthString*"
$OldPrtgFiles | remove-item -whatif
Первое выполнение отобразит -WhatIf
посмотреть, чтобы показать, какие файлы будут удалены. Если вы довольны этим, удалите WhatIf
,