0

作为对我之前问题的更新,我将发布到目前为止的脚本,前两个任务我已经成功地编写了脚本,给我留下了不到 30 天的备份,而当更老时,只有在星期天创建的备份。但是,我无法完成第三个任务。谁能给我一些关于如何完成第三项任务的指示?任何帮助将不胜感激。

到目前为止,这是我的代码:

Function FirstCheck{

$Today = GET-Date

#Check for *.BAK files to see if older than 30 days.
$BackupsOlderThan30 = GET-CHILDITEM C:\Temp\OnTracBak\ –filter *.BAK | WHERE { (($Today - $_.LastWriteTime).Days –gt 30 ) }

#Check for files older than 30 days and that are not Sunday
$NotWeeklyBackups=$BackupsOlderThan30 | where { ($_.LastWriteTime ).DayOfWeek –ne ’Sunday’ }

$NotWeeklyBackups | REMOVE-ITEM

$NotWeeklyBackups.Count

} 

我可能对你有一个问题/小挑战。我会尽量解释清楚。

情况:我们公司为我们的客户使用 SLA。

此 SLA 中的一项是备用条款...在这里我们定义了一些规则:

  1. 从今天起的前 30 天,应每天进行备份并保存。
  2. 第二个月和第三个月应该每周备份一次
  3. 对于第四个月到第二十四个月,应每月保存一份备份。

现在,每天都会进行备份。因此,我们的备份文件夹目前的大小约为 4TB。(很大。)

当然,我们可以手动跟踪和删除或保存我们的备份文件,但当然,我想使用 Powershell 脚本自动执行此操作。

该脚本应执行以下操作: 检查 .bak 和 .trn 文件的文件夹和子文件夹。获取这些文件的日期并应用以下规则:

  1. 如果文件存在 1 到 30 天,请保留所有文件。
  2. 如果文件在第二个月和第三个月之间,请每周(星期日)进行完整备份(删除适用于 2. 的其他备份文件)
  3. 如果文件在第 4 个月和第 24 个月之间,请从每月的第 4 周开始进行完整备份...(删除适用于 3. 的其他备份文件)

目前我不知道如何或从哪里开始编写脚本,或者显然如何执行这些扩展搜索...... :-(

4

1 回答 1

1

使用Get-ChildItemcmdlet 列出文件。每个文件都有一个LastWriteTime属性,您可以通过该属性过滤集合。过滤的业务规则留给读者作为练习。简单的过滤示例是这样的,

$files = @(gci path-to-files) # Force gci to return an array
$cutPoint = (get-date).addDays(-30) # Get date 30 days ago
$filesToPrune = $files | ? { $_.LastWriteTime -lt $cutPoint } # Files for archive process
于 2013-08-12T10:26:07.690 回答