Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот пример применяется только к платформам Windows.
PowerShell использует существительное элемент для ссылки на элементы, найденные на диске PowerShell. При работе с поставщиком Файловой системы PowerShell элемент может быть файлом, папкой или диском PowerShell. Перечисление и работа с этими элементами представляет собой критически важную задачу в большинстве административных обстановок, поэтому мы хотим подробно обсудить эти задачи.
Перечисление файлов, папок и разделов реестра
Так как получение коллекции элементов из определенного расположения является такой общей задачей, командлет Get-ChildItem
предназначен специально для возврата всех элементов, найденных в контейнере, например в папке.
Если вы хотите вернуть все файлы и папки, содержащиеся непосредственно в папке C:\Windows
, введите:
PS> Get-ChildItem -Path C:\Windows
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-16 8:10 AM 0 0.log
-a--- 2005-11-29 3:16 PM 97 acc1.txt
-a--- 2005-10-23 11:21 PM 3848 actsetup.log
...
Описание выглядит так же, как если бы вы вводили команду dir
в cmd.exe
или команду ls
в командной оболочке Unix.
Вы можете выполнять сложные листинги с помощью параметров командлета Get-ChildItem
. Синтаксис командлета Get-ChildItem
можно просмотреть, введя следующее:
Get-Command -Name Get-ChildItem -Syntax
Эти параметры можно смешивать и сочетать, чтобы получить индивидуально настроенные выходные данные.
Перечисление всех содержащихся элементов
Чтобы просмотреть как элементы в папке Windows, так и все элементы, содержащиеся в вложенных папках, используйте параметр RecurseGet-ChildItem
. В списке отображаются все элементы в папке Windows и элементы в вложенных папках. Рассмотрим пример.
PS> Get-ChildItem -Path C:\WINDOWS -Recurse
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll
...
Фильтрация элементов по имени
Чтобы отобразить только названия элементов, используйте параметр Name для Get-ChildItem
:
PS> Get-ChildItem -Path C:\WINDOWS -Name
addins
AppPatch
assembly
...
Принудительное перечисление скрытых элементов
Элементы, скрытые в Файловом проводнике или cmd.exe
, не отображаются в результатах выполнения команды Get-ChildItem
. Чтобы отобразить скрытые элементы, используйте параметр ForceGet-ChildItem
.
Рассмотрим пример.
Get-ChildItem -Path C:\Windows -Force
Этот параметр называется Force, так как можно принудительно переопределить нормальное поведение команды Get-ChildItem
.
Force — это широко используемый параметр, который принуждает командлет выполнять действие, которое он обычно не выполняет, хотя он не может выполнять действия, которые угрожают безопасности системы.
Сопоставление имен элементов с подстановочными знаками
Команда Get-ChildItem
принимает подстановочные знаки в пути к списку элементов.
Так как сопоставление с подстановочными знаками обрабатывается подсистемой PowerShell, все командлеты, принимающие подстановочные знаки, используют одну нотацию и имеют одинаковое поведение сопоставления. Нотация подстановочных знаков PowerShell включает:
- Звездочка (
*
) соответствует нулю или нескольким вхождениям любого символа. - Вопросительный знак (
?
) соответствует ровно одному символу. - Левый символ скобки (
[
) и правый символ скобки (]
) окружают набор символов, которые нужно сопоставить.
Ниже приведены некоторые примеры работы спецификации подстановочных знаков.
Чтобы найти все файлы в каталоге Windows с суффиксом .log
и ровно пять символов в базовом имени, введите следующую команду:
PS> Get-ChildItem -Path C:\Windows\?????.log
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows
Mode LastWriteTime Length Name
---- ------------- ------ ----
...
-a--- 2006-05-11 6:31 PM 204276 ocgen.log
-a--- 2006-05-11 6:31 PM 22365 ocmsn.log
...
-a--- 2005-11-11 4:55 AM 64 setup.log
-a--- 2005-12-15 2:24 PM 17719 VxSDM.log
...
Чтобы найти все файлы, начинающиеся с буквы x
в каталоге Windows, введите следующее:
Get-ChildItem -Path C:\Windows\x*
Чтобы найти все файлы, имена которых начинаются с "x" или "z", введите:
Get-ChildItem -Path C:\Windows\[xz]*
Дополнительные сведения о подстановочных знаках см. в about_Wildcards.
Исключение элементов
Можно исключить конкретные элементы с помощью параметра ExcludeGet-ChildItem
. Это позволяет выполнять сложную фильтрацию в одной инструкции.
Например, предположим, что вы пытаетесь найти библиотеку DLL службы времени Windows в папке System32, и все, что можно вспомнить о имени библиотеки DLL, заключается в том, что она начинается с "W" и имеет "32" в ней.
Выражение, например w*32*.dll
, найдет все библиотеки DLL, удовлетворяющие условиям, но вы можете дополнительно отфильтровать файлы и опустить все файлы win32. Вы можете исключить эти файлы с помощью параметра исключения с использованием шаблона win*
.
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude win*
Directory: C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 3/18/2019 9:43 PM 495616 w32time.dll
-a--- 3/18/2019 9:44 PM 35328 w32topl.dll
-a--- 1/24/2020 5:44 PM 401920 Wldap32.dll
-a--- 10/10/2019 5:40 PM 442704 ws2_32.dll
-a--- 3/18/2019 9:44 PM 66048 wsnmp32.dll
-a--- 3/18/2019 9:44 PM 18944 wsock32.dll
-a--- 3/18/2019 9:44 PM 64792 wtsapi32.dll
Сочетание параметров Get-ChildItem
В одной команде можно использовать несколько параметров командлета Get-ChildItem
. Прежде чем смешивать параметры, убедитесь, что вы понимаете соответствие подстановочных знаков. Например, следующая команда не возвращает результатов:
Get-ChildItem -Path C:\Windows\*.dll -Recurse -Exclude [a-y]*.dll
Результаты отсутствуют, даже если в папке Windows начинаются две библиотеки DLL, начинающиеся с буквы "z".
Результаты не были возвращены, так как мы указали подстановочный знак в качестве части пути. Несмотря на то, что команда была рекурсивной, командлет Get-ChildItem
ограничивает элементы теми, которые находятся в папке Windows с именами, заканчивающимися .dll
.
Чтобы указать рекурсивный поиск файлов, имена которых соответствуют специальному шаблону, используйте параметр Include.
PS> Get-ChildItem -Path C:\Windows -Include *.dll -Recurse -Exclude [a-y]*.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32\Setup
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 8261 zoneoc.dll
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 337920 zipfldr.dll
PowerShell