Помните добрые старые времена команды DOS `dir
`? Как насчет команды Linux `ls
`? Если да, то Get-childItem в основном то же самое, но поднятое на новый уровень.
Фактически, у нас даже есть `dir
` и `ls
` в PowerShell в виде псевдонима. Команда PowerShell Get-Childitem может не только перечислять файлы и папки в файловой системе через консоль PowerShell или PowerShell сценарий, но также перечислять ключи реестра и значения, сертификаты в различных хранилищах сертификатов, а также даже в Active Directory, чтобы назвать несколько.
Если вы новичок или средний скриптер PowerShell, обязательно посмотрите мой БЕСПЛАТНЫЙ мини-курс по созданию инструмента PowerShell! 9,000+ слов глубокого объяснения и идей о том, как создать инструмент PowerShell.
Для понимания Get-Childitem сначала думайте о нем в отношении `dir
` и `ls
`, но вместо просто файлов он рассматривает множество объектов как дочерний элемент и перечисляет их. Вы можете использовать псевдоним или полное имя команды для его использования.
Поскольку эта команда доступна с PowerShell v1, вы можете быть уверены, что она будет работать с вашей версией PowerShell.
Get-ChildItem Пересекается с деревом
A file system is a hierarchy. It has a folder structure with files inside of folders and those folders inside of other folders. A file system is like a tree. That tree has a trunk (C:\
for example) and “branches” coming off of it (folders). In fact, we even have a tree
command.
Вы можете направить эту команду на локальные пути на локальном компьютере, использовать блок сценария PowerShell для удаленного доступа и использовать Get-ChildItem
внутри него, или просто указать UNC-путь. Все работают одинаково. Может быть, мне просто хочется перечислить все файлы в текущем каталоге.
Поставщики PowerShell
Microsoft поняла, что навигация по структуре файловой системы, похожей на “дерево”, может быть применена и к другим системам. В файловой системе “дерево” имеет папки и файлы, но в реестре есть ключи и значения, в то время как в системе сертификатов Windows есть хранилища и сертификаты внутри этих хранилищ. Каждая из этих конкретных областей может быть представлена в виде дерева, поэтому был создан провайдер PowerShell. Зачем весь этот разговор о провайдерах PowerShell? Потому что команда Get-ChildItem
является частью cmdlet *-Item
, которые взаимодействуют с дисками PowerShell, предоставляемыми каждым провайдером.
Команда Get-ChildItem
может выводить любое количество объектов на диске PowerShell и позволяет обрабатывать каждый элемент через конвейер или, возможно, в цикле foreach в PowerShell. Она понимает концепцию диска PowerShell, что позволяет указывать Path
файловой системы, ключ реестра или хранилище сертификатов – все в одном.
Как видно ниже, эта команда может перечислить папку C:\, раздел текущего пользователя в реестре, а также хранилище сертификатов PowerShell.
Фильтрация
Команда PowerShell Get-ChildItem
может не только извлекать все объекты на диске, но и фильтровать информацию с помощью нескольких различных параметров: Filter
, Include
и Exclude
. Всегда лучше использовать всюду присутствующий параметр фильтрации PowerShell Filter
, когда это возможно. Этот параметр напрямую передает синтаксис фильтрации индивидуальному провайдеру. Хотя это гораздо быстрее, этот синтаксис полностью зависит от обращаемого провайдера.
Например, синтаксис фильтрации Filter
вида Name -eq 'foo'
может быть полностью приемлемым при запросе файлов, но вообще не сработает при запросе реестра, потому что провайдер реестра даже не имеет фильтра!
Когда ничего не помогает, всегда можно воспользоваться также параметрами Include
и Exclude
.
Эта команда в PowerShell также имеет несколько параметров, специфичных для файловой системы, таких как Force
, который выводит скрытые файлы и папки, File
и Directory
, которые находят только файлы или папки. Посмотрите полное описание Get-ChildItem
через Get-Help
или в документации Microsoft.
Еще одна крутая особенность Get-ChildItem
– это его способность разрешать пути при использовании символа подстановки. В PowerShell символ подстановки обычно представляет любое значение. Например, если вы хотите увидеть все файлы с расширением .txt, просто укажите путь к папке и *.txt
.
Мы также можем фильтровать по атрибутам файла. Возможно, нам нужно найти только файлы только для чтения в папке.
Резюме
Эта команда PowerShell – одна из тех, которые вы будете использовать многократно. В большинстве случаев вы, вероятно, будете использовать провайдер FileSystem, но важно помнить, что эта команда способна на гораздо большее. Используйте ее для запросов файлов, папок, ключей реестра, значений реестра, сертификатов, пользователей Active Directory, компьютеров или даже переменных среды, функций и многого другого!
В случае сомнений выполните команду Get-PSDrive
, чтобы увидеть список всех загруженных дисков PowerShell, которые Get-ChildItem
может опрашивать для вас.