我有以下 Powerrshell 脚本,它以递归方式告诉我文件夹的大小。我尝试添加该文件夹中构成大小的文件的“计数”,但得到的是一列空白数据
有什么建议么?
Get-ChildItem -path "\\location\of\drive" -Directory -Recurse |
Select-Object FullName |
ForEach-Object -Process{New-Object -TypeName PSObject -Property @{Name =$_.FullName;Size = (Get-ChildItem -path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum ).Sum/1kb}} |
Select-Object Name, Count, @{Name="Size(KB)";Expression={("{0:N2}" -f($_.Size))}}
我目前得到以下内容,但如上所述,我希望计数列显示文件的实际数量
Name Count Size(KB)
---- ----- --------
\\NETWORKNAME\2019\08\01 34,490.13
\\NETWORKNAME\2019\08\02 37,585.78
\\NETWORKNAME\2019\08\03 7,978.57
\\NETWORKNAME\2019\08\04 8,327.71
\\NETWORKNAME\2019\08\05 37,635.42
\\NETWORKNAME\2019\08\06 36,888.54
\\NETWORKNAME\2019\08\07 34,933.20
\\NETWORKNAME\2019\08\08 39,062.42
\\NETWORKNAME\2019\08\09 71,722.52
\\NETWORKNAME\2019\08\10 9,754.89
\\NETWORKNAME\2019\08\11 8,930.47
\\NETWORKNAME\2019\08\12 43,438.02
\\NETWORKNAME\2019\08\13 48,104.64
\\NETWORKNAME\2019\08\14 39,436.49
\\NETWORKNAME\2019\08\15 37,975.93
\\NETWORKNAME\2019\08\16 32,366.63
\\NETWORKNAME\2019\08\17 6,929.40
\\NETWORKNAME\2019\08\18 6,834.03
\\NETWORKNAME\2019\08\19 53,435.72
\\NETWORKNAME\2019\08\20 43,188.17
\\NETWORKNAME\2019\08\21 42,531.59
\\NETWORKNAME\2019\08\22 43,260.43
\\NETWORKNAME\2019\08\23 38,371.61
\\NETWORKNAME\2019\08\24 9,241.68
\\NETWORKNAME\2019\08\25 8,098.56
\\NETWORKNAME\2019\08\26 8,887.18
\\NETWORKNAME\2019\08\27 35,637.54
\\NETWORKNAME\2019\08\28 38,867.32
\\NETWORKNAME\2019\08\29 37,116.23
\\NETWORKNAME\2019\08\30 39,129.28
\\NETWORKNAME\2019\08\31 8,403.53
答案1
一般情况下,我建议始终使用所有属性进行循环,并在循环中执行代码逻辑。此外,将命令的返回结果保存到变量中,以便能够用它执行多项操作,例如获取大小和计数。
另外,你的代码格式确实不太好。尽量以可读的方式格式化,当你写了一些复杂的东西,一年后需要编辑其中的内容时,你会感谢你自己。
# Get Top-Level Directories recursive and loop
Get-ChildItem -path "C:\install" -Directory -Recurse | ForEach-Object {
# Get Sub files & folders and calculate stuff that is needed
$SubFiles = Get-ChildItem -path $_.FullName -Force -Recurse
$Size = ($SubFiles | Measure-Object -Property Length -Sum -ErrorAction 0).Sum/1kb
$FileCount = $SubFiles.count
# Return the output in the format you want to
[PSCustomObject]@{
"Name" = $_.FullName
"Count" = $FileCount
"Size(KB)" = "{0:N2}" -f $Size
}
}
顺便说一句。如果您的某个文件夹有多个子文件夹,它将针对每个子文件夹多次扫描该目录 - 这对我来说没有意义。也许您只想要顶级文件夹的大小和数量?如果是这样,请-recurse
在第一行代码中删除。