使用 PowerShell 查找共享的所有顶级目录中所有文件/子文件夹的最近修改日期

使用 PowerShell 查找共享的所有顶级目录中所有文件/子文件夹的最近修改日期

我在 Windows 2003 文件服务器上有一个共享目录树,其中包含大约 100GB 的数据。我需要在此共享中找到所有顶级目录,其中上次修改时间每个子文件夹下的每个文件自 2011 年 1 月 1 日起未进行过修改。本质上,我正在寻找被放弃的共享。

目录结构如下所示:

-a
--a1
--a2
--a3
----a3_1

-b
--b1
--b2

-c
--c1
----c1_1

etc

我想要做的是找出一切这不是 a 或 b 或 c 下的隐藏文件,其修改日期不是在 1/1/11 之前或之后。

到目前为止,我可以使用以下命令找到每个文件一年后的修改时间:

get-childitem "\\server\h$\shared" -recurse | where-object {$_.mode -notmatch "d"} |
where-object {$_.lastwritetime -lt [datetime]::parse("01/01/2011")}

我不知道该怎么做,逐个检查每个顶层目录,看看其中包含的所有文件是否都超过一年。有什么想法吗?

答案1

我认为你只想看文件修改时间。不确定你想对只包含一年内未修改的子文件夹的文件夹做什么。我也不确定“每个顶级目录”,你的意思是a,,b或者,,...caa1a2

下面看看全部目录,并且仅列出不包含过去一年内编写的文件的目录。如果这产生了您想要的输出,请告诉我:

$shareName = "\\server\share"
$directories = Get-ChildItem -Recurse -Path $path | Where-Object { $_.psIsContainer -eq $true }

ForEach ( $d in $directories ) { 
    # Any children written in the past year?
    $recentWrites = Get-ChildItem $d.FullName | Where-Object { $_.LastWriteTime -gt $(Get-Date).AddYears(-1) } 
    If ( -not $recentWrites ) {
        $d.FullName
    }
}

根据您的评论进行编辑。如果您只想获取不包含过去一年修改的文件的顶级目录,请尝试以下操作。请注意,在非常深/大的共享上,这可能需要一些时间才能运行。

$shareName = "\\server\share"
# Don't -recurse, just grab top-level directories
$directories = Get-ChildItem -Path $shareName | Where-Object { $_.psIsContainer -eq $true }
ForEach ( $d in $directories ) { 
    # Get any non-container children written in the past year
    $recentWrites = Get-ChildItem $d.FullName -recurse | Where-Object { $_.psIsContainer -eq $false -and $_.LastWriteTime -gt $(Get-Date).AddYears(-1) } 
    If ( -not $recentWrites ) {
        $d.FullName
    }
}

相关内容