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

Windows автоматически создает скрытый системный каталог System Volume Information в корне любого подключенного диска с файловой системой NTFS (будь то локальный HDD/SSD диск или съемный USB накопитель). Часто размер каталог System Volume Information может достигать десятки и сотни гигабайт и занимать большую часть диска. В этой статье мы разберемся зачем нужен каталог System Volume Information, что в нем хранится, и как его корректно очистить.

большой размер каталога system volume information в windows

Пустые папки могут не занимать место на диске, но они загромождают вашу систему. Все пустые папки на жестком диске имеют одинаковые названия, и навигация между ними превращается в проблему. Эта проблема может распространяться на производительность.

Удаляя файлы из командной строки, вы должны быть аккуратны, поскольку вы рискуете потерять свои данные. Эти команды обычно не используют мусорную корзину вашей операционной системы. Когда вы удаляете что-либо, оно исчезает, если вы не создали его резервную копию. Всегда регулярно создавайте резервные копии важных файлов. Если что-нибудь пойдет не так, вы можете восстановить свои данные.

С помощью рекурсивных способов можно удалить больше файлов и папок, чем планировалось. Всегда дважды проверяйте путь, который вы нацеливаете в своей команде, чтобы убедиться, что вы хотите. Даже небольшая опечатка может вызвать проблемы.

Всегда тщательно просматривайте содержимое любого каталога, который вы собираетесь удалить. Просмотрите верхний уровень и все вложенные каталоги, чтобы убедиться, что вы не упустите.

МИНИСТЕРСТВО НАУКИ
И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ
ФЕДЕРАЦИИ

федеральное
государственное автономное образовательное
учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ
НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

канд. тех. наук,
доцент

должность,
уч. степень, звание

по дисциплине:
Операционные системы

СТУДЕНТ ГР. №

Кафка Р. С.

Цель
работы:
изучение
основ языка сценариев в операционной
системе Windows и получение практических
навыков работы в Windows PowerShell.

1.
Выполните все упражнения этого раздела
пособия.

2.
Результаты выполнения команд зафиксируйте
на скриншотах.

3.
Исследуйте структуру PowerShell по перечню
четырех разделов справки: Alias,
Cmdlet,
Provider
и HelpFile.
Результат выполнения команд зафиксируйте
на скриншотах.

4.
Согласно варианту задания из таблицы
2.1. задайте команды для нахождения
справочной информации в среде PowerShell по
двум псевдонимам, представленным в
таблице 2.2. Запишите функциональное
назначение этих команд и справочную
информацию в виде имени, синтаксиса,
псевдонимов при ее наличии. В случае
отсутствия информации в таком виде,
сделайте скриншот.

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

Номер
первого псевдонима: 9

Номер
второго псевдонима: 1

Хочу выдать права группе пользователей на определенные папки, в них разорваны наследования.
Я выгрузил все пути в этой папке и хочу дать доступ группе на всё что внутри.
Код ниже, но не могу понять как скормить путь.
Список путей в файле csv в столбце FullName3.
Не могу понять как вытянуть данные из файлы csv.

Import-Csv "C:\csv.csv"
$identity = 'domain\Full Acces'
$rights = 'FullControl'
$inheritance = 'ContainerInherit, ObjectInherit'
$propagation = 'None'
$type = 'Allow'
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)
$Acl = Get-Acl -Path "\\server\folder"
$Acl.AddAccessRule($ACE)
(Get-Item = $_.FullName3).SetAccessControl($acl)

задан 28 авг. 2023 в 9:12

ADDDoN's user avatar

Как выбрать данные из *.csv:

Исходный файл c:\test\csv.csv

FullName1,FullName2,FullName3
FIO1,blablabla,c:\test\src\
FIO2,blablabla,c:\test\folder\

Код в файле read_csv.ps1

$table=Import-Csv "c:\test\csv.csv"
foreach ($row in $table) { $ACL = Get-Acl $row.FullName3 $ACL | Format-Table
}
 Каталог: C:\test
Path Owner Access
---- ----- ------
src BUILTIN\Администраторы BUILTIN\Администраторы Allow FullControl... Каталог: C:\test
Path Owner Access
---- ----- ------
folder BUILTIN\Администраторы BUILTIN\Администраторы Allow FullControl...

ответ дан 28 авг. 2023 в 10:47

Алексей Р's user avatar

Алексей Р

2 золотых знака8 серебряных знаков20 бронзовых знаков

С помощью PowerShell вы можете определить точный размер определенного каталога в Windows (с учетом всех вложенных директорий). Это позволит узнать размер каталог без использования сторонних утилит, таких как TreeSize или WinDirStat. Кроме того, PowerShell позволяет более гибко отфильтровать файлы по типам или размерам, которые нужно учитывать при расчете размера папки.

Для получения размеров файлов в каталогах используются следующие командлеты PowerShell:

  • Get-ChildItem (алиас
    gci
    ) — позволяет получить список файлов в директории (включая вложенные объекты)
  • Measure-Object (алиас
    measure
    ) – складывает размеры всех файлов для получения суммарного размера директории

Например, чтобы получить полный размер директории F:\ISO в Гб, выполните команду:

Рассмотрим используемые параметры:

  • -Force
    — учитывать скрытые и системные файлы
  • -Recure
    — получать список файлов во вложенных директориях
  • -ErrorAction SilentlyContinue
    – игонрировать объекты, к которым у текущего пользователя нет доступа
  • -measure Length -sum
    – сложить размеры всех файлов (свойство Length)
  • .sum/ 1Gb
    – вывести только суммарный размер в Гб

В данном примере размер директории около 37 Гб (без учета NTFS сжатия). Чтобы округлить результаты до двух символов после запятой, выполните команду:

Узнать размер директории с помощью PowerShell команды

С помощью PowerShell можно получить суммарный размер всех файлов определенного типа в директории. Например, чтобы узнать сколько места занято ISO файлами, добавьте параметр
*.iso
:

Суммартный размер файлов определенного типа в папке

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

:/>  Где кнопка вин на компе

Указанная выше PowerShell команда при подсчете размера файлов в каталоге будет выводить неверные данные, если в директории есть символические или жесткие ссылки. Например, в каталоге C:\Windows находится много жестких ссылок на файлы в хранилище компонентов WinSxS. В результате такие файлы могут быть посчитаны несколько раз. Чтобы не учитывать в результатах жесткие ссылки, используйте следующую команду (выполняется довольно долго):

размер каталога windows без учетка жестких ссылок в winsxs

$targetfolder='C:\Users'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % { $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 | Out-GridView -Title "Размер вложенных каталогов и количество файлов"

powershell скрипт для получения размер вложенных директорий и количества файлов в них

% — это алиас для цикла foreach-object.

Использование Windows Explorer для поиска и удаления пустых папок

Вот пошаговая инструкция по поиску пустых папок с помощью Windows Explorer:

  • Нажмите Win + E, чтобы открыть Проводник.
  • Перейдите к диску или папке, где вы хотите найти пустые каталоги.
  • Перейдите на вкладку «Просмотр» и переключите «Скрытые элементы» в контекстном меню, чтобы сделать все скрытые файлы видимыми для поиска.
  • Активируйте ленту поиска, введя слово для включения поиска, выберите Настройки поиска и переключите Все вложенные папки для полного поиска.
  • Нажмите «Размер» , выберите «Пустой» (0 КБ) и выберите «Папка» в разделе «Тип» .
  • Или введите type:folder size:empty в поле поиска, чтобы найти пустые каталоги.
  • Удалите нужные папки из результатов поиска.

Выполненные упражнения

Упражнение
2.1. Запуск оболочки Windows PowerShell.

Запустил
оболочку PowerShell.
Для этого нажал Пуск > Выполнить, затем
ввёл имя файла powershell
и нажал Enter
(рис. 1-2).

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

Рисунок
1 – Запуск PowerShell
через Выполнить

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

Рисунок
2 – Командное окно оболочки PowerShell

Для
выхода из среды Windows
PowerShell
автономного компьютера набрал команду
exit
и нажал клавишу Enter.

  1. Запустил
    Командную строку cmd.exe (рис. 3).

  2. В
    Командной строке набрал команду dir,
    позволяющую вывести список

файлов
и подпапок из указанной папки (рис. 3).

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

Рисунок
3 – Результат выполнения команды dir в
среде cmd.exe

  1. Запустил
    программную оболочку PowerShell.

  2. В
    командной строке оболочки набрал
    команду dir,
    которая является псевдонимом команды
    Get-Child
    ltem
    (Cmdlet).
    Список полученных данных расширен по
    сравнению с результатом выполнения
    этой же команды в среде cmd.exe
    (рис.4).

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

Рисунок
4 – Результат выполнения команды dir в
среде Power Shell

В
редакции команды dir
появился столбец Mode,
отражающий возможные режимы использования
программных средств. Режимы определяются
отдельно для каталогов (d)
и файлов (а). Полный перечень характеристик,
выводимый по различным командам
объектно-ориентированной программной
оболочки, можно просмотреть с помощью
командлета Get-Member
(рис.5).

  1. Осуществил
    вызов справки по командлету в интернете
    с помощью команды: “Get-Help
    Get-Member
    -Online”
    (рис.5).

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

Рисунок
5 – Справочная информация по командлету
Get-Member в интернете

  1. Сравнил
    полученные результаты. В Командной
    Строке DIR – отображает список файлов
    и подкаталогов в каталоге. Когда как в
    Power
    Shell
    команда Get-ChildItem
    имеет гораздо более гибкое использование.
    Она показывает «все вещи внутри вещи»,
    и это может быть не только список файлов
    в каталоге, но и другие объекты в системе.

Упражнение
2.3. Выполнение команды help в разных
программных средах

  1. Запустил
    Командную строку cmd.exe.

  2. В
    Командной строке набрал команду help,
    позволяющую узнать перечень внутренних
    команд ОС Windows (рис.6).

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

Рисунок
6 – Результат выполнения команды help в
среде cmd.exe

  1. Запустил
    программную оболочку PowerShell.

  2. В
    командной строке оболочки набрал
    команду help, которая является псевдонимом
    команды Get-Help (рис.7).

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

Рисунок
7 – Результат выполнения команды help в
среде Power Shell

  1. Сравнил
    полученные результаты. Обе программы
    отображают синтаксис и полезную
    информацию, относящуюся к упомянутой
    команде / командлету.

  2. Вывел
    на экран монитора результат выполнения
    этой команды с разными параметрами:

− Get-Help
* перечисляет все команды Windows PowerShell
(рис.8).

Символ
«*» означает поиск по шаблону. Он
используется, если после текста для
поиска может любая последовательность
символов.

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

Рисунок
8 – Фрагмент результата выполнения
команды Get-Help *

− Get-Help
<команда> выводит справку по
соответствующей команде (рис.9).

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

Рисунок
9 – Справочная информация по командлету
Get-Member в среде Power Shell

− Get-Help
<команда> -Detailed выводит подробную
справку с примерами команды Использование
команды help для получения подробных
сведений о команде help:
Get-Help
Get-Help
–Detailed
(рис.10).

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

Рисунок
10 – Фрагмент результата выполнения
команды

Упражнение
2.4. Связывание команд в конвейер.

  1. Создал
    собственный «файл книги» с названием
    Powershell-Help.txt.

:/>  Что такое прокси-серверы и как ими пользоваться

Нажал
на <Cтрелочку
вверх> и в Командной строке появилась
предыдущая команда, которую дополнил
следующими записями, где E:\Powershell-Help.txt
– расположение создаваемого текстового
файла в каталоге, которое выбираете
самостоятельно.

  1. Нашёл
    его в каталоге и открыл в Блокноте.

На
рис.12 приведены данные из результирующего
файла справочника по группе команд
Export-Alias
среды PowerShell,
открытого в Блокноте.

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

Рисунок
12 – Результат создания файла-книги с
названием Powershell-Help.txt

  1. Проанализировал
    полученный результат. Конвейер PowerShell
    представляет собой мощное средство,
    позволяющее с помощью комбинации ряда
    составных команд выполнять серию
    последовательных операций на одном
    или нескольких объектах. Объединив
    группу составных команд в конвейер,
    можно получить инструкцию, в которой
    будет указано, каким образом следует
    форматировать ее выходные данные, где
    их размещать и как определить операцию
    сортировки выходных данных.

  2. Проверил
    другие
    параметры:
    Get-Alias, Import-Alias, New-Alias, Set-Alias (рис.13).

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

Рисунок
13 – Результат выполнения конвейров с
другими параметрами

Соседние файлы в предмете Операционные системы

Что хранится в каталоге System Volume Information?

Системный каталог System Volume Information находится в корне любого диска Windows и скрыт по умолчанию. Чтобы увидеть этот каталог, разрешите отображать защищенные системных файлов в проводнике Windows: Options -> View -> снимите чекбокс на пункте Hide protected operation system files (Recommended).

Показать скрытую папку System Volume Information

Доступ к этому каталогу есть только у системы (учетная запись NT AUTHORITY\SYSTEM ). Даже встроенный администратор Windows не может открыть и просмотреть содержимое каталога System Volume Information. При его в проводнике появится ошибка доступа:

Расположение недоступно
Нет доступа к C:\System Volume Information
Отказано в доступе

запрещен доступ к system volume information в windows

Чтобы открыть каталог System Volume Information можно назначить свою учетную запись владельцем и предоставить NTFS права. Например, с помощью команд:

takeown /f "C:\System Volume information"
icacls "C:\System Volume Information" /grant Corp\kbuldogov:F

предоставить разрешения на просмотр содержимого папки system volume information

Но особого смысла в этом нет. Кроме того, вы можете по неосторожности удалить в папке важные файлы.

Восстановить исходные права доступа на каталоге System Volume Information:

icacls "C:\System Volume Information" /setowner "NT Authority\System"
icacls "C:\System Volume Information" /remove corp\kbuldogov

Для просмотра содержимого каталога System Volume Information нужно запустить консоль PowerShell с правами SYSTEM;

PsExec.exe -i -s powershell.exe

Вывести содержимое каталога и отсортировать файлы в порядке уменьшения размера:

Найти большие файлы в system volume information

Размер каталога можно получить такой командой PowerShell:

вывести содержимое каталога system volume information

Что же хранится в каталоге System Volume Information? Мне удалось найти информацию о следующих службах, хранящих свои файлы в этой папке (список не является исчерпывающим):

  • WindowsImageBackup — данные точек восстановления системы на клиентских системах или резервные копии System State, сделанные через Windows Server Backup (wbadmin), на серверных ОС;
  • База данных службы индексирования (Indexing Service), используемая для быстрого поиска файлов (в том числе для поиска в Outlook);
  • База данных Distributed Link Tracking Service;
  • Снапшоты (теневые копии) дисков, создаваемые службой Volume Shadow Copy , которые можно использовать для восстановления старых версий файлов. Для каждого снапшота создается отдельный файл без расширения с длинным ID;большие снапшоты (теневые копии vss) в system volume information
  • Настройки дисковых квот NTFS;
  • База и чанки службы дедупликации файлов;
  • База репликации DFSR (dfsr.db);
  • Файл WPSettings.dat службы хранилища (StorSvc);
  • На USB накопителях в этом каталоге хранится файл IndexerVolumeGuid, в котором хранится уникальная метка диска, используемая службой поиска Windows;
  • AppxProgramDataStaging, AppxStaging – резервные копии UWP приложений Windows (можно использовать для восстановления после удаления приложений Microsoft Store);
  • Лог утилиты проверки диска CHKDSK
  • AadRecoveryPasswordDelete и ClientRecoveryPasswordRotation – служебные каталоги BitLocker, используемые при хранении ключа восстановления BitLocker в AD или Azure Entra ID

Примечание. Не удаляете вручную файлы в каталоге System Volume Information, т.к. в нем хранится важная информация, в том числе необходимая для восстановления системы.

Использование PowerShell для поиска и удаления пустых папок

Выполните следующие действия, чтобы найти пустые папки и удалить их с помощью PowerShell:

  • Откройте меню «Пуск» , введите «Powershell», щелкните правой кнопкой мыши и выберите «Запуск имени администратора» .
  • Введите cd /d DriveName:\To\FolderPath в окне PowerShell и нажмите Enter .
  • Чтобы получить список пустых каталогов, выполните эту команду: Get-ChildItem -Directory -Recurse | Where-Object { $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 } | Select-Object FullName
  • После просмотра списка, если вы решите удалить пустые каталоги, выполните эту команду: Get-ChildItem -Directory -Recurse | Где { $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 } | Remove-Item -Force

Этот код сканирует папки и подкаталоги в DriveName:\To\FolderPath и находит пустые каталоги (без файлов, без подпапок) и удаляет их.

Удалить теневые копии в папке System Volume Information

Чаще всего проблема большого размера каталога System Volume Information вызван файлами теневых копий, которые создала служба VSS. Чем чаще создаются теневые копии и чем чаще изменяются файлы на диске, тем быстрее растет размер этого каталога.

:/>  В России окно активации хр не работает по телефону ) в разделе "Окно"

На скриншоте ниже видно, что в папке System Volume Information есть системный файл размером больше 120 Гб.

очень большой размер каталога System Volume Information - более 120 гигабайт

Для быстрой очистки каталога System Volume Information можно удалить старые теневые копии. Чтобы вывести информацию о дисках, для которых служба VSS создает теневые копии, выполните:

vssadmin list shadowstorage - информация по теневым копиям

vssadmin 1.1 - Программа командной строки для администрирования службы теневого копирования томов
(C) Корпорация Майкрософт (Microsoft Corportion), 2001-2013.
Сопоставление хранилища теневой копии
Для тома: (C:)\\?\Volume{9a9e5a02-db8e-447d-9fef-6029dc4f7f10}\
Том хранилища теневой копии: (C:)\\?\Volume{9a9e5a02-db8e-447d-9fef-6029dc4f7f10}\ Использованный объем хранилища теневой копии: 4,69 ГБ (2%)
Выделенный объем хранилища теневой копии: 5,17 ГБ (2%)
Максимальный объем хранилища теневой копии: 23,3 ГБ (10%)

Утилита покажет текущий и максимальный размер данных теневой копии для каждого диска. По умолчанию для хранения данных теневых копий резервируется 10% диска.

На скриншоте ниже видно, что максимальный размер теневых копий (
Maximum Shadow Copy Storage space: UNBOUNDED (100%)
) не ограничен. В этом случае файлы теневых копий VSS могут занять весь диск.

vss shadowstorage лимит не задан unbounded

Настройки квот VSS на дисках могут изменить программы резервного копирования, которые вы устанавливали на компьютер.

vssadmin resize shadowstorage уменьшить размер места под теневые копии

Успешно изменен размер для соответствия хранилища теневой копии

После этого (в Windows 10 и 11) выведите список имеющихся теневых копий для системного диска C: с датами их создания:

Чтобы освободить место, удалите самую старую теневую копию:

vssadmin eудалить старые теневые копии vss

Можете удалить все VSS снимки:

Также вы можете изменить настройки службы восстановления Windows, которая создает точки восстановления из панели управления System Protection (Защита системы). Выполните команду
systempropertiesprotection
, выберите системный диск и нажмите на кнопку Configure (Настроить).

windows 10 включено восстановление системы для системного диска

  • Включить/отключить защиту системы;
  • Узнать текущий размер места под хранение резервных копий образа;
  • Изменить настройки квот для хранения точек восстановления;
  • Удалить все имеющиеся точки восстановления.

отключить защиту системы в windows 10

Также для уменьшения размера каталога System Volume Information вы можете:

  • Перенести данные VSS снимков на другой NTFS диск (
    vssadmin add shadowstorage /for=c: /on=d: /maxsize=30%
    );
  • Отключить/перенастроить функцию История файлов Windows;
  • Выполнить очистку системных файлов на диске с помощью встроенной утилиты cleanmgr.exe (свойства диска -> Очистка диска).cleanmgr выполнить очистку системных файлов

В Windows Server для резервного копирования состояния системы обычно используется Windows Server Backup (WSB). Можно удалить старые версии копий system state с помощью команды:

wbadmin delete systemstatebackup - удаление старых версий резевных копий системы

Для быстрой очистки старых версий резервных копий состояния системы (system state) и снапшотов в Windows Server используйте утилиту diskshadow:

DiskShadow
Delete shadows OLDEST c:\

При каждом запуске команды удаляется самая старая теневая копия (снапшот) диска.

diskshadow удалить старую теневую копию диска в system volume information

Использование командной строки для поиска пустых папок и удаления их

Вот как найти пустые папки и удалить их с помощью Windows Explorer:

  • Откройте меню «Пуск» , введите cmd , щелкните правой кнопкой мыши и выберите «Запуск имени администратора» .
  • В окне командной строки введите cd /d имя диска:\до\путь в папку и нажмите Enter , чтобы открыть указанный каталог.
  • Чтобы получить список пустых файлов, выполните следующую команду: for /f «delims=» %d in (‘dir /ad/b/s ^| sort /R’) do @dir /b «%d» | findstr «^» >nul || эхо %d
  • После просмотра списка, если вы решите удалить пустые папки, выполните эту команду: for /f «delims=» %d in (‘dir /ad/b/s ^| sort /R’) do @dir /b » %d» | findstr «^» >nul || rd «%d»

Этот код сканирует все папки и вложенные папки из C:\To\FolderPath для поиска и удаления пустых каталогов.

Очистка System Volume Information после удаления файлов на томе с дедупликацией

При анализе содержимого каталога System Volume Information в Windows Server вы можете заметить, что много места занимает каталог Dedup\ChunkStore. Это означает, что на диске включена дедупликация файлов.

большой размер каталог дедупликации Dedup ChunkStore в system volume information

Служба дедупликации при нахождении одинаковых чанков в файлах заменяет их на ссылку на уникальный чанк, который сохраняется в каталог System Volume Information. Если вы переместили или удалили оптимизированные файлы с дедуплицированного тома, старые чанки не удаляются немедленно. Эти блоки удаляются специальным заданием сбора мусора (GarbageCollection), которое запускается раз в неделю.

Не отключайте полностью дедупликацию для тома (
Start-DedupJob -Volume D: -Type Unoptimization
), пока не убедитесь что на диске достаточно достаточно свободного места для хранения де-оптимизированных файлов.

Чтобы немедленно запустить процедуру удаления неиспользуемых чанков, выполните команду PowerShell:

start-dedupjob -Volume C:-Type GarbageCollection

Следующее задание проверит целостность оставшихся чанков:

start-dedupjob -Volume C: -Type DataScrubbing

Для мониторинга этих задач используйте командлет:

После окончания задач неиспользуемые чанки в каталоге System Volume Information будут удалены.