Как в PowerShell и Get-ChildItem найти только папки


В этой заметке будет показано, как в PowerShell вывести только папки и подпапки определённого каталога. Мы будем использовать командлет Get-ChildItem, который показывает дочерние элементы выбранного диска или директории.

Как в Get-ChildItem вывести только папки

Чтобы в PowerShell вывести только папки без файлов, используйте командлет Get-ChildItem с опцией -Directory.

К примеру, следующая команда покажет подпапки каталога C:\Users\MiAl\:

Get-ChildItem -Path C:\Users\MiAl\ -Directory

Пример вывода:

    Directory: C:\Users\MiAl

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-r--            5/9/2024  7:23 PM                Contacts
d-r--           5/19/2024  2:39 PM                Desktop
d-r--            5/9/2024  7:23 PM                Documents
d-r--           8/18/2024  5:42 PM                Downloads
d-r--            5/9/2024  7:23 PM                Favorites
d-r--            5/9/2024  7:23 PM                Links
d-r--            5/9/2024  7:23 PM                Music
d-r--            5/9/2024  7:25 PM                OneDrive
d-r--            5/9/2024  7:29 PM                Pictures
d-r--            5/9/2024  7:23 PM                Saved Games
d-r--            5/9/2024  7:28 PM                Searches
d-r--           6/12/2024  1:33 PM                Videos

Если вы хотите вывести только имена папок без каких-либо дополнительных сведений, то используйте следующую команду:

Get-ChildItem -Path C:\Users\MiAl\ -Directory -Name

При желании, вы можете вывести только список папок в данной папке и убрать заголовки таблицы:

Get-ChildItem -Path C:\Users\MiAl\ -Directory | Format-Table -Property Name -HideTableHeaders

Рекурсивный вывод содержимого папок

Если вы хотите получить папки в указанном пути, а также все подпапки которые находятся внутри этих каталогов, то используйте опцию -Recurse:

Get-ChildItem -Path C:\Users\MiAl\ -Directory -Recurse


Вывод получается довольно сумбурным (особенно если имеется много вложенных папок). Данная команда может стать основой для более сложной конструкции из командлетов для поиска или обработки всех папок и подпапок определённого места на диске.

Если вам хочется окинуть взглядом всё содержимое определённого каталога, включая все подпапки, то следующая команда сделает вывод более наглядным:

Get-ChildItem -Path C:\Users\MiAl\ -Directory -Recurse | Format-Table -Property FullName

Как найти пустые папки

Чтобы в PowerShell найти пустые папки, то есть папки без файлов, используйте команду вида:

Get-ChildItem -Path Z: -Recurse -Directory | Where-Object {$_.GetFiles().Count -eq 0}

Вышеприведённая команда PowerShell рекурсивно ищет каталог с помощью параметра -Recurse и передаёт его объект другой команде для поиска количества файлов. Второй командлет проверяет количество файлов каталога на равенство 0 и возвращает только пустые папки.

Чтобы получить наглядный список папок с пустым содержимым попробуйте следующую команду:

Get-ChildItem -Path Z: -Recurse -Directory | Where-Object {$_.GetFiles().Count -eq 0} | Format-Table -Property FullName

Вы получите перечень пустых папок с указанием абсолютного пути до них.

Как найти системные папки

Системными считаются папки у которых установлен специальный атрибут (System).


Get-ChildItem -Path C:\ -Directory -Recurse -System

Вышеприведённая команда PowerShell получает только системные папки. Если у вас нет прав администратора, она выдаст сообщение об исключении, так как доступ к пути к папке запрещён.

Если вы привыкли работать с атрибутами файлов и папок, то следующая команда может показаться вам привычнее (две последние команды дадут идентичный результат):

Get-ChildItem -Path C:\ -Directory -Recurse -Attributes System

Вы можете заметить, что для некоторых папок показана ошибка:

Get-ChildItem: Access to the path 'C:\PerfLogs' is denied.

Get-ChildItem: Access to the path 'C:\Program Files\Windows Defender Advanced Threat Protection\Classification\Configuration' is denied.

Она связана с недостатком прав — вы можете открыть терминал PowerShell с правами администратора и запустить эту команду ещё раз — ошибок станет заметно меньше, но полностью они не исчезнут. Всё дело в том, что Администратор имеет не самые высокие полномочия. Самые высокие полномочия у System. Можно получить привилегии System с помощью специальных утилит для аудита информационной безопасности Windows, но эта тема точно выходит за рамки данной небольшой заметки — я упоминаю об этом только для того, чтобы вы не удивлялись, что даже у пользователя Администратор может быть недостаточно прав для доступа к определённым папкам.

Как в Get-ChildItem посчитать количество каталогов внутри папки

Чтобы получить количество каталогов внутри родительской папки нам понадобиться использовать Get-ChildItem (чтобы получить список всех папок, которые находятся в месте указанном после опции -Path) в паре с командлетом Measure-Object, который и будет считать количество каталогов.

Get-ChildItem -Path C: -Directory | Measure-Object

Get-ChildItem -Path Z: -Directory | Measure-Object

В приведённой выше команде PowerShell она получает все каталоги и проходит через Measure-Object для получения количества каталогов.

Как найти папки с определённым именем. Поиск папок по шаблону имени

С помощью опции -Filter вы можете найти файлы с определённым именем. Вы можете использовать опцию -Filter с подстановочными знаками «*» и «?» и искать папки, чьё имя соответствует шаблону.

К примеру, следующая команда найдёт папку с именем «test»:

Get-ChildItem -Path '/home/mial/' -Directory -Filter 'test'

А эта команда найдут папки, чьё имя содержит строку «test» в любой части имени:

Get-ChildItem -Path '/home/mial/' -Directory -Filter '*test*'

Если вам нужно найти папку с определённым именем расположение которой вам неизвестно, то вы можете использовать следующую конструкцию:

Get-ChildItem -Path '/home/mial/' -Directory -Filter 'test' -Recurse | Format-Table -Property FullName


Эта команда найдёт папки с точным именем «test» и для всех найденных папок выведет только полный путь до данного каталога.

Заключение

Надеюсь, приведённая выше статья поможет вам понять командлет PowerShell Get-ChildItem для получения только папок или свойств, связанных с папками. В рассмотренных примерах ключевой опцией командлета Get-ChildItem является -Directory, которая указывает, что нужно выводить только папки.


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *