【问题标题】:Need a PowerShell script to find folders which does not have files modified yesterday需要一个 PowerShell 脚本来查找昨天没有修改文件的文件夹
【发布时间】:2019-01-02 10:49:00
【问题描述】:

遍历包含文件夹位置的文本文件

foreach ($line in Get-Content "C:\Backup\sample.txt") {
    Get-ChildItem $line | Where {
        $_.LastWriteTime -gt (Get-Date).AddDays(-1)
    } | select Directoryname, Name, LastWriteTime, @{Name="Size (GB)"; Expression={[Math]::Round($_.Length/1MB, 1)}}
}

这样我只能得到昨天修改过的文件。

我想要的是列出昨天修改和没有修改文件的文件夹。

如果文件夹包含昨天修改的文件(修改日期为昨天),则列出这些文件名、文件夹名及其大小(GB)。

还有Write-Host作为备份成功。

对于不包含昨天修改日期的文件的文件夹也应如此。 Write-Host 备份未完成。

【问题讨论】:

  • 只需反转where 条件:-lt-le 而不是-gt
  • 如果没有一个目录昨天有任何文件被修改,或者至少有一个目录昨天没有文件被修改,您是否认为备份不完整?
  • 要在比较日期时匹配不同的日期,您必须通过附加 .Date 去除时间部分。要检查没有任何文件来自该日期,您可以在只有一个匹配时中止或计数匹配并且仅在计数为零时触发。此外,如果只输出文件夹,您计算的 Length 属性应该返回什么?
  • @AnsgarWiechers 我希望通过检查文件修改日期来验证每个文件夹的状态。如果文件修改日期为昨天,则表示备份成功。如果没有,则不完整。
  • @LotPings 仅在备份未完成时提及的文件夹名称。输出应该有 2 个标题。不完整的备份和完整的备份。在不完整的备份下应该只显示文件夹名称。并且在完整备份下应该显示文件名、目录名、大小(GB)。

标签: powershell compare backup


【解决方案1】:

如果至少一个文件夹不包含过去 24 小时内修改过的文件,我将假设您认为备份不完整。

$refdate  = (Get-Date).AddDays(-1)
$complete = $true
$results = foreach ($line in Get-Content "C:\Backup\sample.txt") {
    $result = Get-ChildItem $line |
              Where-Object { $_.LastWriteTime -gt $refdate } |
              Select-Object Directoryname, Name, LastWriteTime,
                  @{n="Size (GB)";e={[Math]::Round($_.Length/1MB, 1)}}
    if ($result) {
        $result
    } else {
        $complete = $false
    }
}

if ($complete) {
    Write-Host 'Backup complete'
} else {
    Write-Host 'Backup incomplete'
}

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 2012-05-30
    • 2016-11-17
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多