0

我正在尝试获取有关驱动器上文件的信息,例如上次访问它们的时间。我可以让它回来。

Get-ChildItem | Group {$_.LastWriteTime.ToString("MM")} | Sort Name | 
    Format-Table Name,Count -auto

Name Count
---- -----
05       2
07       8
10       3
11       2

但我正在寻找:

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

任何人都可以帮忙吗?

4

4 回答 4

1

您是否要根据创建文件和现在之间的月数进行分组,而不是在创建月份进行分组?如果是这样,那么使用 aNew-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'
于 2018-05-30T22:38:39.153 回答
0

以下脚本按函数 Get-FriendlySizeyyyy-MM分组并使用

## https://stackoverflow.com/q/50535131/6811411
function Get-FriendlySize {
    param($Bytes)
    $sizes='Bytes,KB,MB,GB,TB,PB,EB,ZB' -split ','
    for($i=0; ($Bytes -ge 1kb) -and 
        ($i -lt $sizes.Count); $i++) {$Bytes/=1kb}
    $N=2; if($i -eq 0) {$N=0}
    "{0,6:N$($N)} {1}" -f $Bytes, $sizes[$i]
}


Get-ChildItem | Group {$_.LastWriteTime.ToString("yyyy-MM")}| Sort Name -Desc|ForEach {
   [pscustomobject]@{
       'FileAge' = $_.Name
       'Space Used'= (Get-FriendlySize (($_.Group|measure Length -sum).sum) )
    }
 }

示例输出(带十进制逗号的德语区域设置)

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
于 2018-05-30T22:24:18.507 回答
0

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

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"
于 2018-05-30T21:41:23.407 回答
0

您可以使用PowerShellHumanizer模块。它添加了自定义文件系统表格式,因此您将看到:

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
于 2018-05-30T22:40:52.360 回答