大小文件夹returns 0

The size folder returns 0

我有脚本:

$array = @("c:")

    foreach ($z in $array) 
        {
            
            $FileSystemObject = New-Object -com  Scripting.FileSystemObject
            $folders = (Get-Childitem $z | ? {$_.Attributes -eq "Directory"})

            foreach ($folder in $folders)
                {
                  Write-Host "Counting for..." "$folder "
                  $FileSystemObject.GetFolder($folder.FullName).Size/1GB                            
                }
        }

结果,我得到这样的结果:

计数...程序 0,0629891464486718

计数... Pictures_temp 1,2558867437765

计数...温度 13,7048118021339

计数... Windows 0

我不知道为什么我没有得到“Program Files”或“Users”文件夹,例如(权限问题?我有管理员权限)。以及为什么 Windows returns 0。我想,系统文件夹的处理方式不同。但是有什么办法可以解决吗? 我的一些网络文件夹也发生了同样的事情,我得到了错误的数据。

我确实得到了与此一致的结果。请注意,如果拒绝访问子项目,它会输出错误。 运行 作为管理员或处理 $error 以正确丢弃它们。

$array = @("c:")
foreach ($z in $array) 
{   Get-Childitem $z | Where-Object { $_.PSIsContainer } | ForEach-Object {
        Write-Host "  for..." "$_"
        ((Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum)/1Gb
    }
}

或者,尊重初始脚本

$array = @("c:")
foreach ($z in $array) 
{   $folders = (Get-Childitem $z | Where-Object { $_.PSIsContainer })
    $folders | ForEach-Object {
        Write-Host "  for..." "$_"
        ((Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum)/1Gb
    }
    Clear-variable -name folders -ErrorAction SilentlyContinue
}

@user10722100 我可以再请教您一个提示吗?我的脚本更大。我展示了较短的版本,因为我认为它会更容易。但现在我在实施你的版本时遇到了问题:)

    $array = @("C:")
    
    foreach ($z in $array) 
        {
            Write-Host "[$((get-date).ToString("yyyy-MM-dd__HH-mm-ss"))] Counting for" $z "..."
            echo '<pre>'
            
            $FileSystemObject = New-Object -com  Scripting.FileSystemObject
            $folders = (Get-Childitem $z -Directory)
            foreach ($folder in $folders)
                {
                    $folder | Add-Member -MemberType NoteProperty -Name "SizeGB" –Value(($FileSystemObject.GetFolder($folder.FullName).Size) / 1GB)
                }
                
            $folders | sort -Property SizeGB -Descending | where {$_.SizeGB -gt 1} | select fullname,@{n=’Size in GB’;e={[math]::Round($_.SizeGB,2)}} | Format-Table -AutoSize
            
            echo '</pre>'
           
            $totalSize = (($folders | Measure-Object 'SizeGB' -Sum).Sum)
            $totalsizeform="{0:N2}" -f $totalSize
            
            echo "Total size for "
            echo '<b>'
            echo $z
            echo '<font color="green">'
            $varia2=": &nbsp;&nbsp;&nbsp;&nbsp;" + $totalsizeform + " GB"
            Echo $varia2
            echo '</b><br>'
            echo '<hr />'
            ’’
            echo '</font>'
            
            $suma=$suma+$totalSize
            $sumasum="{0:N2}" -f $suma
        }

您删除了 $folders 和 SizeGB,但我不知道如何更改它以使其正常工作:-)