File 优化Powershell脚本以查找旧文件并在DFS复制文件夹中删除它们

File 优化Powershell脚本以查找旧文件并在DFS复制文件夹中删除它们,file,powershell,replication,file-management,File,Powershell,Replication,File Management,故事是这样的。我有一个文件共享,可以在世界上不同地方的两台服务器之间复制。如果文件只被查看过,DFS将不会复制该文件,但我不想删除该文件/文件夹,因为它是在我设置的7天时间段内使用的。因此,为了确保不删除仍然使用的文件,我必须检查这两个位置的LastAccessTime 我现在有这个 Set-ExecutionPolicy RemoteSigned $limit = (Get-Date).AddDays(-7) $PathOne = "FirstPath" $PathTwo = "SecondP

故事是这样的。我有一个文件共享,可以在世界上不同地方的两台服务器之间复制。如果文件只被查看过,DFS将不会复制该文件,但我不想删除该文件/文件夹,因为它是在我设置的7天时间段内使用的。因此,为了确保不删除仍然使用的文件,我必须检查这两个位置的LastAccessTime

我现在有这个

Set-ExecutionPolicy RemoteSigned
$limit = (Get-Date).AddDays(-7)
$PathOne = "FirstPath"
$PathTwo = "SecondPath"
$ToBeDeletedPathOne = Get-ChildItem -Path $PathOne -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastAccessTime -lt $limit }
$TobeDeletedPathTwo = Get-ChildItem -Path $PathTwo -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastAccessTime -lt $limit }
$DiffObjects = Compare-Object -referenceobject $ToBeDeletedPathOne -differenceobject $ToBeDeletedPathTwo -IncludeEqual
$ToBeDeletedOverall = DiffObjects | where {$_.SideIndicator -eq "=="}
在此之后,我循环并删除两个位置标记为删除的文件

我遇到的部分问题是,有大量的文件,这可能需要很长时间。所以我想让它变得更好/更快。我的想法是让这个脚本作为不同的脚本在每个FS服务器上运行扫描,并等待它们返回输出。通过这种方式,它可以在本地机器上比远程机器更容易地进行扫描,并且可以同时扫描两个位置


问题的另一个方面是,我不知道如何做到这一点。我会继续研究这个问题,如果我解决了这个问题,我会在这里发布,以防将来有人发现这个有用

您可以在本地运行所有内容。将脚本复制到您想要的机器如果需要,可以制作一个脚本来复制它们,然后使用PSTools之类的工具在本地机器上启动它们。这基本上应该在所有机器上同时运行脚本。

听起来您有一个正在运行的进程,但您正在尝试加快它,对吗?您是否可以在本地计算机上运行该进程,并将结果保存在所有计算机都可用的文件或数据库中?这有助于加快事情的进展吗?是的,这目前起作用,但速度很慢。将数据存储在数据库中,然后对其执行查询,这将有助于加快处理过程,但不会太多。这里的主要问题是,扫描不一致,而且扫描时间太长,因为它有很多东西要扫描。我的理想解决方案是让一个中心脚本在每台机器上本地启动一个较小的扫描脚本,比如启动作业,这就是我目前正在修补的东西。那些较小的脚本将扫描并报告它们将删除的内容,而中心脚本将删除这些文件。我建议执行Get-Help New Job-Full和Get-Help Get-Job-Full,以读取作为后台作业并行运行的内容。某些内容必须是远程的,因为它们是位于两个位置的两个独立服务器。一个在达拉斯,另一个在新奥尔良。我目前正试图让这个脚本忽略扫描,在每台服务器上运行一个单独的脚本,通过将文件作为新的后台作业运行并将其设置为等待完成来扫描文件。