Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 文件龄报告_Powershell_Fileserver - Fatal编程技术网

Powershell 文件龄报告

Powershell 文件龄报告,powershell,fileserver,Powershell,Fileserver,我经常在这个网站上找到我的答案,但在这种情况下,我需要更多个性化的帮助。我希望有人能给我指出正确的方向 我一直在胡思乱想,试图从我的NAS系统中绘制一份报告,以获取数据年龄和数据大小的统计信息,以便尝试提供一个计费/显示解决方案 我主要是通过Powershell使用get childitem实现了这一点,我甚至尝试使用[System.IO.Directory]::EnumerateDirectory访问.net, 和其他命令。所有这些解决方案都是有效的,但我似乎获取这些信息的速度非常慢,特别是如

我经常在这个网站上找到我的答案,但在这种情况下,我需要更多个性化的帮助。我希望有人能给我指出正确的方向

我一直在胡思乱想,试图从我的NAS系统中绘制一份报告,以获取数据年龄和数据大小的统计信息,以便尝试提供一个计费/显示解决方案

我主要是通过Powershell使用get childitem实现了这一点,我甚至尝试使用[System.IO.Directory]::EnumerateDirectory访问.net, 和其他命令。所有这些解决方案都是有效的,但我似乎获取这些信息的速度非常慢,特别是如果我将其与Jam TreeSize进行比较,后者可以相当快地获取这些信息

值得注意的是,我甚至在powershell中尝试了多线程,认为如果我可以从各个点收集数据,那么收集整个数据的速度会更快,但我的结果基本上是混合的

我希望以前有人处理过这类项目,并设法找到一种很好的快速(呃)的方法。我甚至愿意接受其他语言来解决这个问题

快速说明,我正在powershell v5中执行此操作。我也开始学习一点python,所以如果有人建议我在这里学习,这将是一个很好的地方

编辑:

好的,这里有一些例子。 时代: Treesize需要10秒 Powershell Get ChildItem大约需要20分钟 Powershell dotnet操作大约需要2分钟

已统计的对象数为60000个对象,大小为120gb

使用recurse获取childitem将获取指定位置中的所有文件对象,包括其属性,例如,上次访问时间和大小(以字节为单位)dotnet您需要使用EnumerateFiles等的组合,然后将其与FileInfo循环,后者在给定位置获取文件对象,然后分别检查其属性

在多线程方面,我将向您指出我使用的一些链接,在这里添加的链接太多了,但是我已经尝试创建一个运行空间池,但是我也尝试手动运行两个单独的运行空间来比较结果,它们基本相同。为什么我沉迷于时间,虽然我上面使用的测试目录只有2分钟,但我的NAS在某些卷中有数百万个文件。我做的一个测试需要一个半小时才能完成,如果我要用其他卷来做,那就需要几个小时。我只是想找到更接近Treesize的速度


编辑:我已将robocopy变通方法标记为答案,但是如果您对不同的语言和程序有任何建议,请随时发表意见,这将是我将来会研究的内容

我已经去过那里,要得到您想要的是。。。至少需要技巧:TreeSize直接从MFT表读取信息,而
Get ChildItem
则在更高级别上运行,已经在操作系统中。因此,速度变化很大

因此,如果你想加快你的报告,你真的需要深入到引擎盖下,在较低的级别编写一些代码

对我来说,即使这不是最快的解决方案,我还是折衷地使用了
robocy/l/log:c:\mylog.txt
(它不复制任何字节,只将文件记录到
mylog.txt
),然后我对其进行了解析。您可以使用多线程选项(
/MT:[N]
,其中N默认为8)来加快速度


我发现这种方法的有用之处在于,如果我需要进一步调查,我会在一个文件中保存我需要的所有数据,因此查询它会更快。静态的,不更新的,但是当你谈论百万个文件时,我认为某个时刻的照片是一个很好的方法

你能发布你使用过的代码吗,它们花费了多少时间,你想获取什么信息?虽然主题可能很有趣,但问题太广泛了。评论不是为了扩展你第一手问题中的信息。请编辑您的问题,以便后续读者无需阅读所有这些内容。(我没有,我也不打算)谢谢Lottings,第一次的海报,will learnThanks curropar,我明天要给它开一个聚会,看看我是怎么做的。感谢您的建议TreeSize仅在以管理员身份启动时以及仅在扫描整个本地驱动器时才使用MFT。MFT速度更快,尤其是在旧硬盘上,SSD上的速度增长可以忽略不计。TreeSize Professional提供许多客户用于生成文件龄统计信息的命令行选项。完全披露:我是TreeSize的作者,如果您的报告缺少一个功能,请告诉我们。谢谢您的澄清,@JoachimMarder!我以系统管理员的身份工作,通常以管理员权限启动,并针对卷的根目录,通常查找卷几乎已满的原因,这就解释了我的经验。关于职业化,很遗憾,这不是我的决定。@JoachimMarder正如你所见,我发现你的应用程序效率令人沮丧,哈哈哈。您的应用程序也可以很好地扫描网络共享。如果出于个人兴趣,您愿意将缓存本地搜索树化吗?我有时觉得,如果我重新扫描一个目录,它会比以前快一点。如果这是秘密的调味品,不要担心分享:)我肯定也会研究你所说的那些命令行。是Powershell还是cmd?@StuartW:TreeSize不缓存,但Windows缓存,这就是为什么重新扫描通常更快的原因。命令行为cmd,请参见: