【问题标题】:The size folder returns 0大小文件夹返回 0
【发布时间】:2021-08-14 02:10:16
【问题描述】:

我有脚本:

$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

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

【问题讨论】:

  • 您是否以管理员身份运行 PowerShell?
  • ? {$_.Attributes -eq "Directory"} 可以替换为-Directory
  • @TheMadTechnician - 是的,作为管理员。 @SantiagoSquarzon - 谢谢。使用$folders = (Get-Childitem $z -Directory),我得到“程序文件”和“用户”文件夹。但就像 Windows 文件夹一样 - 返回 0。
  • 更准确地说,“Program Files”和“Program Files (x86)”是不同的:计数 ... Program Files - 0 计数 ... Program Files (x86) - 4.50032385252416
  • 尝试添加-Force

标签: powershell directory size


【解决方案1】:

我确实有与此一致的结果。请注意,如果拒绝访问子项目,它会输出错误。以管理员身份运行或处理 $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
}

【讨论】:

  • 就是这样!非常感谢 :D C 盘只是一个例子。问题出在网络资源上。由于列出了错误,我已经知道问题是某些目录的文件路径太长。现在我需要弄清楚如何将错误重定向到日志文件,我得到了我想要的。
  • 我将使用下面的代码记录错误$Error | ForEach-Object { $errorWrite = $_.Exception.Message $data = Get-Date -UFormat "%Y/%m/%d %R %A:" Write-Host "$data","$errorWrite" *>> C:\temp\logtest.log } $error.Clear()
【解决方案2】:

@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,但我不知道如何更改它以使其正常工作 :-)

【讨论】:

  • 刚刚更新了初始答案以与您的第一个摘录保持一致。变量名称应该在您的版本中得到尊重和可重用。
  • @user10722100 谢谢,但是:Measure-Object : The property "SizeGB" cannot be found in the input for any objects。您的代码有效,但我没有得到格式正确的表格:$ folders | table sort -Property SizeGB -Descending | where {$ _. SizeGB -gt 1} | select fullname, @ {n = "Size in GB"; e = {[math] :: Round ($ _. SizeGB, 2)}} | Fo...。我的技能太弱了,我只能承受这种类型的组合:$folder | Add-Member -MemberType NoteProperty -Name "SizeGB" –Value((Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue).Sum)/1Gb
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多