使用Powershell检索用户配置文件的大小

时间:2019-02-05 16:44:24

标签: powershell

我正在尝试在Windows计算机中检索配置文件的确切大小。

下面是我的代码和O / P

$profiles = Get-ChildItem C:\Users | ?{Test-path C:\Users\$_\NTUSER.DAT} | Select -ExpandProperty Name
  foreach($profile in $profiles)
    {
    $largeprofile = Get-ChildItem C:\Users\$profile  -recurse | Measure-Object -Sum length | Select -ExpandProperty Sum
    $largeprofile = [math]::Round(($largeprofile/1MB),2) + "MB"
    if($largeprofile -lt 20){Continue}
    $object = New-Object -TypeName PSObject
    $object | Add-Member -MemberType NoteProperty -Name Name -Value $profile
    $object | Add-Member -MemberType NoteProperty -Name "Size(MB)" -Value $largeprofile
    ($object | fl | Out-String).Trim();Write-Output "`n"
    }
  

O / P

     

名称:admin

     

大小(MB):34.62

但是,该文件夹的确切大小为181MB,powershell无法读取父文件夹中的所有文件夹和文件,如何获取显示在该文件夹属性中的确切大小。

注意:对于配置文件文件夹o / p以外的其他文件夹,都是正确的。

1 个答案:

答案 0 :(得分:0)

递归目录时,必须将参数-Force添加到Get-ChildItem。通过文档Get-ChildItem-Force参数:

  

允许cmdlet获取否则无法访问的项目   由用户,例如隐藏文件或系统文件。

此外,您将要添加-ErrorAction SilentlyContinue,以免出现Access Denied错误。这些更改使您的代码如下所示:

$profiles = Get-ChildItem C:\Users | ?{Test-path C:\Users\$_\NTUSER.DAT} | Select -ExpandProperty Name
  foreach($profile in $profiles)
    {
    $largeprofile = Get-ChildItem C:\Users\$profile -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum length | Select -ExpandProperty Sum
    $largeprofile = [math]::Round(($largeprofile/1MB),2) + "MB"
    if($largeprofile -lt 20){Continue}
    $object = New-Object -TypeName PSObject
    $object | Add-Member -MemberType NoteProperty -Name Name -Value $profile
    $object | Add-Member -MemberType NoteProperty -Name "Size(MB)" -Value $largeprofile
    ($object | fl | Out-String).Trim();Write-Output "`n"
    }