Необычное поведение PowerShell: Понимание команд gci и их результирующего вывода
PowerShell – мощный инструмент для автоматизации и управления системами на Windows. Однако, даже опытные пользователи иногда сталкиваются с необычным поведением команд. В данной статье мы рассмотрим нюансы работы команды gci
(Get-ChildItem) и разберемся, почему некоторые команды возвращают неожиданные результаты.
Как работает команда gci
Команда gci
в PowerShell используется для получения списка файлов и каталогов в указанной директории. С помощью различных параметров можно фильтровать результаты, в том числе по типу файлов. Рассмотрим несколько примеров команд, которые возвращают различные результаты при аналогичном вводе.
Примеры команд и их результаты
-
Полный путь с фильтрацией для jar-файлов:
gci C:\tools\* -filter b*.jar -recurse | select fullname gci C:\tools\b* -filter b*.jar -recurse | select fullname
Эти команды вернут следующие файлы:
C:\tools\Briss-2.0\lib\bcmail-jdk15-1.46.jar C:\tools\Briss-2.0\lib\bcprov-jdk15-1.46.jar C:\tools\Briss-2.0\lib\Briss-2.0.jar
-
Узкие фильтры по префиксам:
gci C:\tools\br* -filter b*.jar -recurse | select fullname gci C:\tools\bri* -filter b*.jar -recurse | select fullname
Здесь мы получим:
C:\tools\Briss-2.0\lib\Briss-2.0.jar
Причины различных результатов
Доказывая свою точку зрения о том, что не все команды работают как ожидается, важно проверить полные пути и фильтры. Например, добавление параметра -Recurse
позволяет искать файлы в подкаталогах, однако, входные пути могут быть автоматически обработаны системой.
Разделение путей в NT
Старые функции NT OS автоматически разбивают входной путь на составляющие. Это может привести к неожиданным результатам, когда PowerShell применяет фильтры к разным частям пути. Например, команда:
gci c:\tools\briss-2.0.jar -Recurse
может работать по-разному в зависимости от конфигурации системы.
Проверка структуры папок
Если вы хотите воспроизвести аналогичное поведение как у описанных выше команд, создайте структуру папок, аналогичную:
C:\tools\Briss-2.0\lib
С установленным программным обеспечением, как Chocolatey, вы получите ожидаемую структуру для проверки.
Изменения, которые могут повлиять на результат
Важно отметить, что не все команды работали в разных версиях Windows. Например, команды работали и в чистых установках Windows 10 и 11, но результаты могли варьироваться.
Пример команды с неправильным именем
К примеру, команда:
gci "C:\tools\briss-2.0.*" -filter "b*.jar" -recurse | select fullname
может дать другой результат:
C:\tools\Briss-2.0\lib\Briss-2.0.jar
Заключение
Работа с PowerShell требует внимания и понимания, как команды формируют результаты. Анализируя выводы команд gci
, можно выявить особенности их работы и избежать потенциальных ошибок. Научившись правильно формулировать запросы, вы сможете оптимизировать свою работу в PowerShell и эффективно управлять файлами в системе.