2019-07-23 12:37:36
来 源
中存储
归档管理
将冷数据移动到低成本存储可以降低存储成本。这里有一些PowerShell代码可以帮助您入门。

作者最近浏览了文章,看到介绍的一个InfiniteIO的免费应用程序,据称该应用程序有可能将存储成本降低80%。该应用程序旨在扫描企业NAS设备,以识别可以迁移到低成本云存储的冷数据,从而降低总体存储成本。小有遗憾的是它只在Mac OS上运行。

于是作者想试试是否可以使用PowerShell创建类似的东西。为了降低复杂性,选择不重新创建应用程序的仪表板(尽管有一种方法可以在PowerShell中构建仪表板)。相反,作者开始构建一个简单的脚本来检查本地存储位置,并编译一段时间内未访问过的文件列表。这是提出的代码:

$Path='C:Scripts'

$Age = 60

$TotalSize = 0

$TargetDate=(Get-Date).AddDays(-$Age)

 

$Files = Get-ChildItem -Path $Path | Where-Object {$_.LastAccessTime -LE $TargetDate} | Select-Object Name, LastAccessTime, Length

ForEach ($File in $Files) {$TotalSize = $TotalSize + $File.Length}

$TotalSize = $TotalSize / 1MB

$Size = [math]::round($TotalSize,2)

 

$Output1 = ' '

$Output2 = 'The total size of your old files is: ' + $Size + ' MB'

 

$Files

$Output1

$Output2

第一行代码创建一个名为$ Path的变量,其中包含要检查的路径(在本例中为C: Scripts)。该脚本当前检查单个文件夹,但通过使用递归开关,也可以检查子文件夹。

第二行代码定义了一个名为$ Age的变量。$ Age变量实质上定义了文件旧的含义。在这种情况下,我将$ Age设置为60,这意味着在过去60天内未访问过的任何文件都将被视为旧文件。显然,您可以调整此值以满足您自己的需求。

$ TotalSize变量将用于存储最近未访问的文件占用的累计总空间量。

下一行代码定义了目标数据。例如,如果我们要识别60天内未访问过的文件,那么我们需要知道60天前的日期。这条线就是这样。Get-Date cmdlet检索当前日期。AddDays选项允许您将特定天数添加到当前日期。由于我们期待过去的日期,我使用了一个负号后跟$ Age变量。这会导致PowerShell从当前日期减去60天。

下一行代码是找到旧文件的代码。这里我使用Get-ChildItem cmdlet来检查指定文件夹中的文件。命令的Where-Object部分检索早于指定日期的文件(-LE $ TargetDate)。此命令的Select-Object部分检索文件名,上次访问文件的日期和时间以及文件的大小(长度)。

脚本的下一部分设置For Each循环。在这里,我将获取每个已识别文件的大小,并将其添加到$ TotalSize变量中。循环完成后,$ TotalSize将包含过去60天内未访问过的文件所占用的所有空间的累计总数。

循环完成后,我将$ TotalSize变量除以1MB。这样,空间消耗可以以MB而不是以字节显示。也可以将$ TotalSize除以1GB。

下一行创建一个名为$ Size的变量。我使用此变量将$ TotalSize值四舍五入到两位小数。这有助于保持输出清洁。

最后,我创建了几个输出变量,然后显示了$ Files变量和两个输出变量的内容。这提供了一个漂亮,整洁的输出,清楚地列出了指定位置中过去60天内未访问过的所有文件,以及这些文件占用的空间。您可以在图1中看到输出结果。

识别冷数据的代码

请记住,我创建的脚本实际上只是第一步。将脚本扩展为自动迁移已识别的文件会相对容易。作为替代方案,可以将文件列表写入文本文件或CSV文件以供查看。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。