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