PowerShell文件的使用期限(以月为单位)

PowerShell文件的使用期限(以月为单位),powershell,Powershell,我正在尝试获取有关驱动器上文件的信息,就像上次访问这些文件一样。我可以把它拿回来 Get-ChildItem | Group {$_.LastWriteTime.ToString("MM")} | Sort Name | Format-Table Name,Count -auto 但我在寻找: Age in Months Storage Space Used (MB) 0 100 MB 1 120 MB 2

我正在尝试获取有关驱动器上文件的信息,就像上次访问这些文件一样。我可以把它拿回来

Get-ChildItem | Group {$_.LastWriteTime.ToString("MM")} | Sort Name | 
    Format-Table Name,Count -auto
但我在寻找:

Age in Months   Storage Space Used (MB)
0                 100 MB
1                 120 MB
2                 50 MB
3                 20 MB
4                 10 MB
5                 5 MB

有人能帮忙吗

我认为这可能实现你的目标。不确定这是否是最干净的方式,但我仍在学习自己

get-childitem | Select-Object Name, @{
    Name = "Age in Months" ;
    e = {[int](((Get-date) - ($_.lastwritetime)).days/30)} 
 } ,

 @{
    Name="Storage Spaced Used (MB)" ;
    e = {[math]::Round($_.Length / 1MB, 2 )}
 } | 



Sort-Object -property "Age in months"

以下脚本按yyyy-MM分组,并使用

示例输出带小数点逗号的德语区域设置

FileAge Space Used
------- ----------
2018-05    364 Bytes
2017-08  18,12 KB
2017-07  10,30 KB
2017-06  52,44 KB
2017-05   1,77 KB
2017-04    606 Bytes
2017-03  24,85 KB
2017-02   8,45 KB
2017-01  14,54 KB
2016-12  27,22 KB
2016-11 160,85 KB
2016-10   1,33 MB
2016-09 338,42 KB
2016-08   1,76 MB

是否要按文件创建时到现在的月数分组,而不是按创建月分组?如果是这样,那么使用新的Timespan应该可以做到这一点,如下所示:

ls -File | % {
    New-Object psobject -Property @{
        Age = [int]((New-TimeSpan -Start $_.LastWriteTime).Days / 31)
        Size = ($_.Length) 
    }
} | Group-Object Age | Select @{
    Name = 'Age in Months'
    Expression = {[int]($_.Name)}}, 
    @{Name ='Storage Size Used (MB)'
    Expression = {[int](($_.Group.Size | Measure-Object -Sum).Sum / 1MB)}
} | sort 'Age in Months'
您可以使用模块。它添加了自定义文件系统表格式,因此您将看到:

PS C:\> Get-ChildItem


    Directory: C:\Program Files\7-Zip


Mode     LastWritten         Length Name
----     -----------         ------ ----
da----   9 months ago               Lang
-a----   one year ago         93 KB 7-zip.chm
-a----   one year ago         79 KB 7-zip.dll
-a----   one year ago         49 KB 7-zip32.dll
-a----   one year ago          1 MB 7z.dll
-a----   one year ago        414 KB 7z.exe
-a----   one year ago        178 KB 7z.sfx
-a----   one year ago        163 KB 7zCon.sfx
-a----   one year ago        784 KB 7zFM.exe
-a----   one year ago        533 KB 7zG.exe
-a----   4 years ago          366 B descript.ion
-a----   one year ago         40 KB History.txt
-a----   one year ago          2 KB License.txt
-a----   one year ago          2 KB readme.txt

这就成功了。谢谢我始终建议使用完整的cmdlet名称以提高可读性;i、 例如,将ls替换为Get ChildItem,%ForEach对象,将Select替换为Select对象,将sort替换为sort对象。如果有人重新定义了别名,这也可以避免出现问题。我想,我总是认为这取决于上下文以及脚本是为谁编写的。当我为自己编写脚本时,我倾向于走最短的路线,对它不那么教条,但如果它是在别人的系统上运行的,那么我会避免使用别名。我这个例子的基本原理是强调新对象、新时间跨度和“组对象”,淡化与问题相关的不太重要的元素。不过,这可能只是我在文章中的理由。明白-但也要记住,新加入PowerShell的人将受益于不必在头脑中翻译别名。换言之,正如你所说,化名可以用于个人用途,但对于公众消费,如是,我会说替换化名是首选。这并不是对每个月的长度进行分组/汇总。下面我给你一个新来者的标准建议:如果一个答案解决了你的问题,请单击大复选标记接受它✓ 在它旁边,也可以选择向上投票,投票需要15或更多的信誉点。如果你发现其他答案有帮助,就投票给他们。接受它,你将获得2点声誉积分,并向上投票帮助未来的读者。请看。如果您的问题尚未完全回答,请提供反馈或建议。
ls -File | % {
    New-Object psobject -Property @{
        Age = [int]((New-TimeSpan -Start $_.LastWriteTime).Days / 31)
        Size = ($_.Length) 
    }
} | Group-Object Age | Select @{
    Name = 'Age in Months'
    Expression = {[int]($_.Name)}}, 
    @{Name ='Storage Size Used (MB)'
    Expression = {[int](($_.Group.Size | Measure-Object -Sum).Sum / 1MB)}
} | sort 'Age in Months'
PS C:\> Get-ChildItem


    Directory: C:\Program Files\7-Zip


Mode     LastWritten         Length Name
----     -----------         ------ ----
da----   9 months ago               Lang
-a----   one year ago         93 KB 7-zip.chm
-a----   one year ago         79 KB 7-zip.dll
-a----   one year ago         49 KB 7-zip32.dll
-a----   one year ago          1 MB 7z.dll
-a----   one year ago        414 KB 7z.exe
-a----   one year ago        178 KB 7z.sfx
-a----   one year ago        163 KB 7zCon.sfx
-a----   one year ago        784 KB 7zFM.exe
-a----   one year ago        533 KB 7zG.exe
-a----   4 years ago          366 B descript.ion
-a----   one year ago         40 KB History.txt
-a----   one year ago          2 KB License.txt
-a----   one year ago          2 KB readme.txt