Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Этот пример применяется только к платформам 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