Powershell: получить размер Windows каталога пользователя (C: \ Users \ <UserName>) - PullRequest
1 голос
/ 07 февраля 2020

Мне нужно получить размер всех пользовательских папок на 200 виртуальных машин. Мне нужно -force, чтобы увидеть скрытые папки других пользователей.

$objFSO = New-Object -com  Scripting.FileSystemObject 
"{0:N2}" -f (($objFSO.GetFolder("C:\users").Size) / 1MB) + " MB"

Прекрасно работает, например, для C: \ Temp, но возвращает 0,00 МБ для C: \ Users, даже на моем локальном компьютере, где я являюсь администратором.

Get-ChildItem -path c:\users -force -recurse | Measure-Object length -sum

Выдает исключения безопасности - даже в моей собственной пользовательской папке с правами администратора, запущенной в сеансе PS с повышенными правами.

+ CategoryInfo          : PermissionDenied: (C:\Users\YuriPup\Documents\My Music:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Нет причин подчеркивать это или делать это с нуля (если это не учебное упражнение). В Интернете есть много примеров, показывающих, как это сделать. Есть даже готовые модули, которые вы можете использовать на MS powershellgallery.com, которые вы можете установить напрямую.

Find-Module -Name '*folder*' | Format-Table -AutoSize

Version Name                   Repository Description                                                                                                               
------- ----                   ---------- -----------                                                                                                               
1.6.8   PSFolderSize           PSGallery  This module enables you to gather folder size information, and output the results easily in various ways. GitHub Repo: ...
1.3.1   GetSTFolderSize        PSGallery  Get folder sizes blazingly fast, with the Svendsen Tech Get-STFolderSize function. Also measures and displays how long ...
1.0     cEPRSFolderPermissions PSGallery  cEPRSFolderPermissions Module helps in providing the required permissions for a User to the respective Folder             
1.0.4   FolderBookmarks        PSGallery  The module provides functions to manage and use bookmarks that point to folders.                                          
1.0     cFolderQuota           PSGallery  DSC Resource for Creating Quotas and Quotas Templates                                                                     
1.0.0.0 ExplorerFolder         PSGallery  Manages the Explorer Shell                                                                                                
2.0.0   FolderEncoder          PSGallery  Encode files from folder for(for example) uploading to cloud                                                              
1.0     DeleteSearchFolders    PSGallery  Module used for finding and deleting Search folders from an Exchange Mailbox                                              
1.0.3   Illallangi.MailFolders PSGallery  Manage Outlook Folders  
0 голосов
/ 08 февраля 2020

Можете ли вы попробовать с этим сценарием? Вы можете получить размер каталога с помощью команды gci.

'{0:N2} GB' -f ((gci –force C:\Users\$directoryName –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)

То же самое вы можете l oop для всех пользователей в каталоге c:\users и выполнить его на заданном списке удаленных машин.

# List of servers
$Computers = @("Machine1", "Machine2", "Machine3")   

#Start all jobs in parallel 
ForEach($Computer in $Computers) 
{ 
   Write-Host $Computer 

   $Depth = 1
   $Path = 'C:\Users\'

$Levels = '/*' * $Depth
Get-ChildItem -Directory $Path/$Levels |

ForEach-Object 
{ 
   $name = ($_.FullName -split '[\\/]')[-$Depth] 
   #Write-Host $name;
   $wmidiskblock = "'{0:N2} GB' -f ((gci –force C:\Users\$name –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)";
   Write-Host $wmidiskblock;
} 

   Start-Job -scriptblock $wmidiskblock  -ArgumentList $Computer 

} 

Get-Job | Wait-Job 

$out = Get-Job | Receive-Job 
$out |export-csv 'c:\temp\result.csv'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...