Получить размер пользовательских профилей с PowerShell - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь получить точный размер профиля в машине 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

Размер (МБ): 34,62

Однако точный размер папки составляет 181 МБ, PowerShell не может прочитать все папки и файлы внутриродительская папка, как я могу получить точный размер, который отображается в свойствах папки.

Примечание: Для папок, отличных от папки профиля, o / p является правильным.

1 Ответ

0 голосов
/ 05 февраля 2019

Вам нужно будет добавить параметр -Force в Get-ChildItem, когда вы рекурсируете каталог.Из документов Get-ChildItem параметр -Force:

Позволяет командлету получать элементы, к которым пользователь не может получить иного доступа, например скрытые или системные файлы.

Кроме того, вы захотите добавить -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"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...