默认情况下,X天后删除旧文件,但某些目录例外[Powershell]

时间:2019-11-27 22:53:51

标签: powershell scripting

我正在尝试解决以下情况:

我有一个包含多个子目录和文件的目录,我需要在其中设置诸如保留策略之类的内容,默认情况下,我会将文件设置为不超过365天,其中有一些特殊目录我想保留给其他目录除了我的默认值以外的一段时间。这些目录是使用以下语法在txt文件中指定的

驱动器的内容:\ Path \ to \ special_dirs.txt

D:\Path\to\vendor1 -396
D:\Path\to\vendor2 -45

到目前为止,这是我提出的内容(它仅在特殊目录上起作用,下一部分我想继续进行的部分不起作用):

# Script to remove old files from Archive: D:\Path\to
# Declaring variables to be used
$controlfile = "Drive:\Path\to\list\special_dirs.txt"
$dir = "D:\Path\to"
$default_days = "-365"
$excluded_dirs = Get-Content $controlfile | Foreach-Object {$_.Split()[0]}

foreach ($line in Get-Content $controlfile) {
    $split = $line.split(" ")
    $file_path = $split[0]
    $max_days = $split[1]

    Get-ChildItem $file_path -Include *.* -File -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays($max_days))} | Remove-Item -Force -Recurse -Verbose -WhatIf
}

# Removing everything else older than 365 days old
Get-ChildItem -Path $dir -Include *.* -File -Recurse -Directory -Exclude $excluded_dirs | Where-Object {($_.LastWriteTime -lt $curr_date.AddDays($default_days))} | Remove-Item -Force -Recurse -Verbose -WhatIf

即使目录为空,我也不希望删除目录,我只想删除文件,脚本的最后一部分只是删除365天之前的所有内容,其中有一个我想保留30天的目录除了默认时间以外,如何完成此操作的任何想法? 我使用了文件列表,以便可以继续向供应商添加目录,从而可以使供应商保留的时间超过或少于默认天数。

2 个答案:

答案 0 :(得分:0)

这样的事情怎么样?。

$30DayDirs = @('C:\Temp\Test1\','C:\Temp\Test2\')
$60DayDirs = @('C:\Temp\Test3\')
$365DayDirs = @('C:\Temp\Test4\')

foreach($file in $30DayDirs){
    $file = Get-ChildItem $30DayDirs -Recurse |where LastWriteTime -LT (Get-Date).AddDays(-30)
    Remove-Item $file.FullName -Force -Recurse
}

foreach($file in $60DayDirs){
    $file = Get-ChildItem $60DayDirs -Recurse |where LastWriteTime -LT (Get-Date).AddDays(-60)
    Remove-Item $file.FullName -Force -Recurse
}

foreach($file in $365DayDirs){
    $file = Get-ChildItem $365DayDirs -Recurse |where LastWriteTime -LT (Get-Date).AddDays(-365)
    Remove-Item $file.FullName -Force -Recurse
}

答案 1 :(得分:0)

我已解决以下问题:

# Script to remove old files from DFS Archive: D:\Path\to
# Declaring variables to be used
$controlfile = "Drive:\Path\to\list\special_dirs.txt"
$dir = "D:\Path\to"
$default_days = "-365"
$excluded_dirs = Get-Content $controlfile | Foreach-Object {$_.Split()[0]}

# Removing old files from special directories first
cd $dir
foreach ($line in Get-Content $controlfile) {
    $split = $line.split(" ")
    $file_path = $split[0]
    $max_days = $split[1]

    Get-ChildItem $file_path -Include *.* -File -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays($max_days))} | Remove-Item -Force -Recurse -Verbose
}

# Removing everything else older than 365 days old
Get-ChildItem $dir -Directory -Exclude $excluded_dirs | Get-ChildItem -Include *.* -File -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays($default_days))} | Remove-Item -Force -Recurse -Verbose

并且我已经将我的special_dirs.txt文件修改为:

vendor1 -396
vendor2 -45