Windows PowerShell использует существительное Item для обращения к элементам, расположенным на диске Windows PowerShell. При работе с поставщиком Windows PowerShell FileSystem Item может представлять файл, папку или диск Windows PowerShell. Вывод и работа этих элементов является важной основной задачей в большинстве административных настроек, поэтому следует подробнее остановиться на этих задачах.
Перечисление файлов, папок и разделов реестра (командлет Get-ChildItem)
Поскольку получение набора элементов из определенного местоположения является типичной задачей, имеется командлет Get-ChildItem, специально предназначенный для возвращения всех элементов, найденных в контейнере (например в папке).
Если нужно вернуть все файлы и папки, содержащиеся непосредственно в папке "C:\Windows", введите:
PS> Get-ChildItem -Path C:\Windows Directory: Microsoft.Windows 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, введите:
PS> Get-Command -Name Get-ChildItem -Syntax
Эти параметры можно совмещать и объединять для получения необходимого вывода.
Вывод всех вложенных элементов (параметр -Recurse)
Чтобы увидеть элементы папки Windows вместе со всеми элементами во вложенных папках, воспользуйтесь параметром Recurse командлета Get-ChildItem. В выводе отображены все элементы папки "Windows" и все элементы вложенных папок. Пример.
PS> Get-ChildItem -Path C:\WINDOWS -Recurse Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\AppPatch Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 1852416 AcGenral.dll ...
Фильтрация элементов по имени (параметр -Name)
Чтобы отобразить только имена элементов, используйте параметр Name командлета Get-Childitem:
PS> Get-ChildItem -Path C:\WINDOWS -Name addins AppPatch assembly ...
Принудительный показ скрытых элементов (параметр -Force)
Элементы, которые обычно не видны в проводнике Windows или оболочке Cmd.exe, не отображаются в выводе команды Get-ChildItem . Чтобы отобразить скрытые элементы, используйте параметр Forceкомандлета Get-ChildItem: Пример.
Get-ChildItem -Path C:\Windows -Force
Этот параметр называется Force, поскольку позволяет принудительно изменить обычное поведение команды Get-ChildItem. Параметр "Force" широко используется, поскольку приводит к результату, который при обычной работе командлета является недоступным. При этом он никак не влияет на безопасность системы.
Поиск имен элементов с использование подстановочных знаков
Команда The Get-ChildItem допускает использование подстановочных знаков в пути к элементам, которые нужно показать.
Поскольку подстановочные знаки обрабатываются ядром Windows PowerShell, все командлеты, которые допускают подстановочные знаки, используют то же обозначение, и обладают таким же поведением при сопоставлении. Предназначение подстановочных знаков Windows PowerShell таково:
-
звездочка (*) соответствует нулю или большему числу вхождений любого знака;
-
знак вопроса (?) соответствует ровно одному знаку;
-
набор сопоставляемых знаков заключается между левой квадратной скобкой ([) и правой квадратной скобкой (]).
Ниже приведено несколько примеров использования подстановочных знаков.
Чтобы найти все файлы в каталоге Windows с суффиксом .log и ровно пятью знаками в основном имени, введите следующую команду:
PS> Get-ChildItem -Path C:\Windows\?????.log Directory: Microsoft.Windows 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 ...
Чтобы найти все файлы в каталоге Windows, начинающиеся с буквы x, введите:
Get-ChildItem -Path C:\Windows\x*
Чтобы найти все файлы, чьи имена начинаются с x или z, введите:
Get-ChildItem -Path C:\Windows\[xz]*
Исключение элементов (параметр -Exclude)
Можно исключить некоторые элементы с помощью параметра Exclude командлета Get-ChildItem.. Это позволяет выполнять сложную фильтрацию при помощи одной команды.
Предположим, например, что необходимо найти файл динамической библиотеки Windows Time Service в папке "System32", причем известно лишь, что имя файла начинается с буквы "W" и содержит строку "32".
Выражение вида w*32*.dll найдет все файлы DLL, которые удовлетворяют условиям, но оно также может вывести совместимые с Windows 95 и 16-разрядной системой Windows файлы DLL, которые содержат в именах сочетания символов "95" или "16". Можно исключить файлы, содержащие в имени такие числа с помощью параметра Exclude с шаблоном *[9516]*::
PS> Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll -Exclude *[9516]*
Directory: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2004-08-04 8:00 AM 174592 w32time.dll
-a--- 2004-08-04 8:00 AM 22016 w32topl.dll
-a--- 2004-08-04 8:00 AM 101888 win32spl.dll
-a--- 2004-08-04 8:00 AM 172032 wldap32.dll
-a--- 2004-08-04 8:00 AM 264192 wow32.dll
-a--- 2004-08-04 8:00 AM 82944 ws2_32.dll
-a--- 2004-08-04 8:00 AM 42496 wsnmp32.dll
-a--- 2004-08-04 8:00 AM 22528 wsock32.dll
-a--- 2004-08-04 8:00 AM 18432 wtsapi32.dll
Использование нескольких параметров Get-ChildItem
Можно использовать несколько параметров командлета Get-ChildItem в одной команде. Перед объединением параметров убедитесь в том, что правильно понимаете значение подстановочных знаков. Например, следующая команда не возвращает никакого результата:
PS> 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.Windows PowerShell.Core\FileSystem::C:\Windows\System32\Setup Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 8261 zoneoc.dll Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\Windows\System32 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2004-08-04 8:00 AM 337920 zipfldr.dll