Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Windows Server 2012/2012 R2 (http://forum.oszone.net/forumdisplay.php?f=117)
-   -   Вывод информации о пространстве. (http://forum.oszone.net/showthread.php?t=356278)

poisonkit 29-04-2025 17:03 3037562

Вывод информации о пространстве.
 
Доброго времени суток.
Поступила задача от руководства, сделать им распечатку по каждому пользователю, сколько занимает место рабочий стол, папка загрузки и папка видео на терминальном сервере. Т.е. такого вида
user1
Рабочий стол: 10мб
Загрузки: 20мб
Видео: 30 мб
user2
...

Пользователей более 500 и я ручками просто замучаюсь это делать.
Может есть какой лайф хак и данные занести как-то в эксель таблицу?

Подскажите плз, опытные админы.

NickM 29-04-2025 19:05 3037566

Как узнать размер каталога с помощью PowerShell?

Anton04 30-04-2025 09:24 3037576

poisonkit,

ПО WinDirStat подойдёт?

P.S.
Цитата:

Цитата poisonkit
Загрузки: 20мб »

Вот эту папка точно на автоматическую очистку на терминальном сервере однозначно.

poisonkit 30-04-2025 15:55 3037607

Цитата:

Цитата Anton04
ПО WinDirStat подойдёт? »

Я ей как раз пользуюсь, но не нашел функции, что-бы в таблицу выводил результат. Подскажите, как это сделать с помощью этой программы?

Цитата:

Цитата NickM
Как узнать размер каталога с помощью PowerShell? »

Не совсем понял, как можно реализовать под текущую задачу (

NickM 30-04-2025 16:11 3037609

Цитата:

Цитата poisonkit
Не совсем понял, как можно реализовать под текущую задачу ( »

Что именно не поняли?

Как модифицировать предложенный сценарий для подкаталогов:
Цитата:

Цитата poisonkit
рабочий стол, папка загрузки и папка видео »

, или прочитать, понять направление и сделать по своему, или что?

NickM 30-04-2025 21:34 3037617

Цитата:

Цитата NickM
прочитать, понять направление и сделать по своему »

Цитата:

Цитата NickM
модифицировать предложенный сценарий для подкаталогов: »

Например:
Код:

$targetfolder='C:\Users'
$dataColl = @()
gci -force $targetfolder -Directory -ErrorAction SilentlyContinue| % {
        gci -force $_.fullname -Directory -ErrorAction SilentlyContinue| Where-Object {($_.Name -match "^Desktop$") -or ($_.Name -match "^Downloads$") -or ($_.Name -match "^Videos$")}| % {
                $len = 0
                gci -recurse -force $_.fullname -ErrorAction SilentlyContinue| % { $len += $_.length }
                $filesCount = (gci -recurse -force $_.fullname -File -ErrorAction SilentlyContinue| Measure-Object).Count
                $dataObject = New-Object PSObject -Property @{
                        Folder = $_.fullname
                        SizeGb = ('{0:N3}' -f ($len / 1Gb)) -as [single]
                        filesCount=$filesCount
                }
        $dataColl += $dataObject
        }
}
$dataColl| Export-Csv ([Environment]::GetFolderPath("Desktop")+"\outfile.csv") -Delimiter ';' -NoTypeInformation

Код:

"SizeGb";"Folder";"filesCount"
"0";"C:\Users\Default\Desktop";"0"
"0";"C:\Users\Default\Downloads";"0"
"0";"C:\Users\Default\Videos";"0"
"0";"C:\Users\k1r\Desktop";"3"
"0.319";"C:\Users\k1r\Downloads";"443"
"0.002";"C:\Users\k1r\Videos";"5"
"0";"C:\Users\Public\Desktop";"10"
"0";"C:\Users\Public\Downloads";"1"
"0";"C:\Users\Public\Videos";"1"
"0.585";"C:\Users\v17x\Desktop";"123"
"27.589";"C:\Users\v17x\Downloads";"4240"
"2.131";"C:\Users\v17x\Videos";"188"


Anton04 01-05-2025 08:51 3037624

Цитата:

Цитата poisonkit
Я ей как раз пользуюсь, но не нашел функции, что-бы в таблицу выводил результат. Подскажите, как это сделать с помощью этой программы? »

Такой функциональности в данной программе нет, она позволяет только визуально оценить место. Ищите альтернативу.

DJ Mogarych 05-05-2025 11:59 3037723

Ещё один вариант на Powershell v5:
Код:

# Корень с каталогами пользователей
$users = dir "c:\users" -Directory
# Файл отчёта
$reportFile = "c:\temp\$(get-date -f yyyy-MM-dd-HH-mm-ss) Отчёт по профилям пользователей.csv"

function Measure-Folder ($path,$displayname) {
    if (test-path $path) {$size = ((dir $path -file -recurse |select -expand length |measure -Sum).sum / 1mb).ToString("0.00")}
    else {$size = "Отказано в доступе"}
    "$($path.Split('\')[-2]);$displayname;$size"
}

$report = foreach ($user in $users) {
    Measure-Folder -path "$($user.fullname)\desktop" -displayname "Рабочий стол"
    Measure-Folder -path "$($user.fullname)\downloads" -displayname "Загрузки"
    Measure-Folder -path "$($user.fullname)\videos" -displayname "Видео"
}

# Сохранение
"Имя пользователя;Папка;Размер (МБ)" > $reportFile
$report >> $reportFile

Примерный вывод (формат CSV):
Код:

Имя пользователя;Папка;Размер (МБ)
Default.migrated;Рабочий стол;Отказано в доступе
Default.migrated;Загрузки;Отказано в доступе
Default.migrated;Видео;Отказано в доступе
user1;Рабочий стол;6424,75
user1;Загрузки;29793,81
user1;Видео;30215,31
Public;Рабочий стол;0,01
Public;Загрузки;1,38
Public;Видео;0,00
RDV GRAPHICS SERVICE;Рабочий стол;Отказано в доступе
RDV GRAPHICS SERVICE;Загрузки;Отказано в доступе
RDV GRAPHICS SERVICE;Видео;Отказано в доступе

Файл без проблем импортируется в Excel или LibreOffice.
Можно вообще поставить модуль ImportExcel и выгружать в xlsx напрямую.


Время: 02:44.

Время: 02:44.
© OSzone.net 2001-