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




Содержание