Powershell вывести файлы с расширением
Windows PowerShell предоставляет пользователям четыре способа работы с файлами. В данной статье речь пойдет о командах, которые были созданы специально для файлов. Команды, которые вы можете использовать для работы с файлами:Get-ChildItem Get-Item Copy-Item Move-Item New-Item Remove-Item Rename-Item
Windows PowerShell предоставляет пользователям четыре способа работы с файлами.
- Применение составных команд. Существует ряд команд, созданных специально для работы с файлами. При помощи этих команд вы можете управлять файлами и путями к файлам так, как если бы работали с содержанием файлов.
- Применение команд DOS. PowerShell полностью совместим с командами DOS. Таким образом, то, что вы можете сделать при использовании DOS, вы можете сделать и при помощи PowerShell. PowerShell признает даже команду xcopy.
- Использование инструментария управления Windows Management Instrumentation (WMI). WMI предлагает иной механизм для управления файлами (например, изменение файловых свойств, поиск или переименование файла). Лучше всего запускать команды WMI в удаленном режиме.
- Применение методов Microsoft. NET Framework. Пространство имен. NET System.IO доступно через командную строку PowerShell. Эта строка включает в себя классы System.IO.File и System.IO.FileInfo.
В данной статье я расскажу о командах, которые были созданы специально для файлов. Вот те команды, которые вы можете использовать для работы с файлами:
Использование Get-ChildItem
Команда Get-ChildItem возвращает элементы, обнаруженные в одном или нескольких указанных местах. Местоположение может быть контейнером файловой системы, таким как каталог, или местом, показанным другим провайдером, таким как подраздел реестра или хранилище сертификатов. Вы можете задействовать параметр Recurse данной команды, чтобы добраться до элементов во всех подпапках.
Если использовать эту команду без параметров, она возвращает все дочерние элементы (такие как подпапки и файлы) в текущем местоположении. Например, если текущее местоположение – корневой каталог H, то запуская команду Get-ChildItem, вы получите результаты, похожие на те, что показаны на экране 1.
Экран 1. Результаты работы Get-ChildItem |
Используя параметры, вы можете получить информацию, которая вам нужна. Например, следующая команда возвращает все файлы. log в корневом каталоге C, включая подкаталоги:
Как мы видим, эта команда использует параметры -Include, -Recurse и –Force. Параметр –Include служит для возвращения заданных элементов. Он поддерживает использование групповых символов и является идеальным для указания расширения имени файла. Параметр –Recurse дает PowerShell указание возвращать подпапки наряду с файлами. Параметр –Force добавляет скрытые и системные файлы к выходным данным.
Следующая команда дает те же результаты, что и предыдущая, потому что параметр –Path понимает групповые символы:
Для некоторых параметров команд PowerShell имя параметра вы можете опустить, если знаете, что параметр находится в той позиции, которая нужна PowerShell. Так происходит при использовании параметра –Path команды Get-ChildItem. Таким образом, следующая команда выдаст тот же результат, что и предыдущая команда:
Параметр –Path может принимать множественные аргументы, разделенные запятыми. Например, предположим, что вы хотите возвратить. log-файлы из двух мест: корневого каталога С и корневого каталога Н, последний является текущим (то есть местоположением по умолчанию). Для выполнения этого действия нужно указать значение C:\* для получения всех файлов журналов из корневого каталога С и значение * для получения всех файлов журналов из корневого каталога Н (поскольку корневая папка Н является местоположением по умолчанию, вам не нужно указывать H:\.). Необходимо разделить два аргумента запятой, например так:
В результатах примера на экране 2 обратите внимание на атрибут «h" в колонке Mode корневого каталога Н. Этот атрибут показывает, что файл ntuser.dat.LOG является скрытым. Это обнаруживается при помощи параметра –Force.
Экран 2. Вывод скрытых файлов |
Хотя в примерах это и не показано, вы можете обратиться к Get-ChildItem при помощи дополнительных имен, псевдонимов. Вот три встроенных псевдонима: dir (как в DOS команда dir), gci и ls (как команда ls в UNIX).
Использование команды Get-Item
Команда Get-Item возвращает заданные элементы из назначенных местоположений. Как и ChildItem, Get-Item может применяться для навигации по различным типам хранилищ данных. В отличие от Get-ChildItem, Get-Item не имеет местоположения по умолчанию, поэтому вы должны всегда предоставлять, как минимум, одно местоположение с помощью параметра –Path. Хотя сам параметр и нужен, указывать имя параметра не требуется. Например, вот простая команда, которая использует «точку» для возвращения информации о текущем каталоге (в данном случае корневая папка Н):
Результаты показаны на экране 3. Команда Get-Item позволяет задействовать групповой символ * для возвращения всего содержимого элемента (то есть всех дочерних элементов). Например, следующая команда возвращает весь контент текущего каталога (в данном случае корневого каталога Н). Точка и символ звездочки могут быть использованы как компоненты в пути файла, но вы должны еще указать косую черту как разделитель папок:
Результаты вы можете увидеть на экране 4. Важно понимать, что команды PowerShell, включая Get-Item, возвращают объекты. Команда Get-Item возвращает объекты System.IO.DirectoryInfo, которые содержат несколько методов и свойств, которые вы можете использовать. Чтобы увидеть эти методы и свойства, можно передать результаты команды Get-Item в команду Get-Member. Если вы хотите увидеть эти свойства, можете запустить такую команду:
Как показано на экране 5, свойство LastAccessTime возвращает дату и время, когда к указанному каталогу был в последний раз осуществлен доступ.
Например, если вы хотите выяснить, когда к текущему каталогу был осуществлен доступ в последний раз, вы запускаете команду:
Заметим, что в этой команде вызов Get-Item. заключен в круглые скобки и что между закрывающей круглой скобкой и LastAccessTime стоит точка. Круглые скобки вокруг вызова «Get-Item. » нужны для того, чтобы возвращенные объекты сохранялись в памяти и вы могли бы выполнять с ними дополнительные операции. В этом случае операцией является поиск возвращаемого значения свойства LastAccessTime объекта. В PowerShell вы используете символ точки для получения доступа к ряду свойств объекта и методов. Вот почему следует вставить точку между закрывающейся скобкой и LastAccessTime.
Существует коллекция специальных свойств, которая называется NoteProperty. Вы можете применять ее для того, чтобы сузить выводимые результаты для определенного типа объекта. Вы можете использовать Get-Member с параметром -MemberType NoteProperty, чтобы узнать о специальных свойствах этой коллекции:
Если вы запустите эту команду, то обнаружите, что коллекция возвращает шесть свойств: PSChildName, PSDrive, PSIsContainer, PSParentPath, PSPath и PSProvider. Свойство PSIsContainer коллекции NoteProperty показывает, является ли объект контейнером (папкой). Свойство возвращает True, когда объект является папкой, и False, когда он является файлом. Вы можете использовать это свойство для ограничения вывода Get-Item папками:
Давайте обсудим эту команду подробнее. Ее результаты показаны на экране 6. Вы передаете по конвейеру весь контент корневого каталога С команде Where-Object, которая позволяет отфильтровать объекты. В этом случае вы используете PSIsContainer из NoteProperty для фильтрации выходных данных, и, таким образом, возвращаются только каталоги. Автоматическая переменная $_ представляет каждый файловый объект, как только он передается команде по конвейеру.
Экран 6. Ограничение вывода команды Get-Item только папками |
Как и в случае с Get-ChildItem, вы можете обращаться к Get-Item по дополнительному имени. У Get-Item есть одно встроенное дополнительное имя: gi.
Использование Copy-Item
Команда Copy-Item является реализацией в PowerShell команды copy bp DOS и команды cp из UNIX. Но помимо этого, Copy-Item сконструирован для работы с данными, выдаваемыми любым провайдером. Первыми двумя параметрами команды являются -Path (вы используете его для указания элемента, который хотите скопировать) и –Destination (вы применяете его для указания места, в которое хотите скопировать этот элемент). Они позиционные, поэтому имена параметров можно опустить. Например, следующая команда копирует файл test.txt из папки C:\Scripts в папку C:\Backups\Scripts:
Параметр –Path принимает групповые символы, поэтому вы можете копировать несколько файлов сразу. Например, следующая команда копирует все файлы в папке C:\Scripts в папку C:\Backups\Scripts:
Чтобы получить более детальное управление операцией копирования, вы можете задействовать параметры -Recurse, -Filter и –Force. Так, следующая команда копирует все файлы. txt, содержащиеся в C:\Scripts в C:\Temp\Text:
Обратите внимание, что «обратная кавычка» в конце первой строки является символом продолжения строки в PowerShell.
Немного освоившись, вы можете вставить свойство FullName в параметр –Path для копирования тщательно отобранного списка файловых объектов, используя либо Get-Item, либо команду Get-ChildItem:
На самом деле это предложение является комбинацией трех отдельных команд. Первая команда (то есть команда в первой строке) возвращает все файлы. txt в корневом каталоге С. Вторая команда (команда во второй и третьей строках) вычленяет список текстовых файлов таким образом, что содержит только те файловые объекты, чье свойство LastAccessTime больше, чем месяц назад. Третья команда (команда в последней строке) вставляет каждое файловое имя в свойство –Path, располагающееся в Copy-Item, используя команду ForEach-Object. Слишком сложно для вас? Тогда можете принять входные данные по конвейеру. Только убедитесь, что вы указали имя параметра –Destination так, чтобы Copy-Item знала, что делать с этими входными данными, так как данный параметр находится не в ожидаемой позиции:
Хотя в наших примерах это и не показано, вы можете обратиться к Copy-Item через дополнительные имена. Существует три псевдонима: copy, cp, cpi.
Использование Move-Item
Move-Item очень похожа на Copy-Item. Фактически, если вы заменяете Copy-Item на Move-Item в любой из команд, представленных в предыдущем разделе, команды будут вести себя во многом так же, за исключением того, что исходные файлы будут удалены в исходную папку.
Однако есть одно важное различие. Если вы запустите одну и ту же команду Copy-Item дважды, то обнаружите, что PowerShell переписывает существующий файл в папку назначения без какого-либо предупреждения.
Move-Item более осторожна в этом смысле и вместо удаления выдает ошибку. Например, если вы запускаете команду
то получите ошибку Cannot create a file («нельзя создать файл»), так как файл уже существует. Использование параметра –Force приводит к тому, что Move-Item переписывает существующий файл.
Помимо параметра –Force, вы можете задействовать параметры Recurse и –Filter в команде Move-Item, чтобы настраивать ее. Например, следующая команда перемещает текстовые файлы в папке C:\Scripts и ее подпапках в папку C:\Temp\Text. В данном случае вам нужно указать имя параметра –Destination, поскольку вы не используете этот параметр в той позиции, где его ожидает PowerShell:
Как и Copy-Item, Move-Item имеет три псевдонима: move, mv и mi.
Использование New-Item
New-Item играет двойную роль — создателя каталога и файла (кроме того, она может создавать разделы и параметры реестра). Когда вы хотите создать файл, вам нужно указать параметры –Path и –ItemType. Как было показано выше, параметр –Path является позиционным, таким образом, не требуется имя параметра –Path, когда вы задаете путь и имя (то есть путь к файлу) сразу же после имени команды. Также следует указать параметр –ItemType при помощи флажка»file«. Вот пример:
Параметр –Path может принимать массив строк так, что вы можете создавать несколько файлов за раз. Вам просто нужно разделить пути при помощи запятых. Вдобавок, необходимо вставить сначала параметр -ItemType»file«, который означает, что вам нужно указать имя параметра –Path, поскольку он теперь не первый параметр после имени команды:
Если файл с точно таким же именем пути файла уже существует, вы получите ошибку. Однако вы можете указать параметр –Force так, что New-Item перепишет существующий файл.
Что на самом деле примечательно, так это то, что New-Item позволяет вставлять текст в файл посредством параметра –Value:
Не забудьте указать параметр –Force, если файл уже существует. Иначе система выдаст ошибку.
Параметр –Value может принимать ввод данных по конвейеру, что является отличным способом перенаправлять вывод данных других команд в файл. Вам нужно просто конвертировать выходные объекты в строку, используя Out-String (если вы этого не сделаете, New-Item создаст новый файл для каждого объекта). Например, следующая команда возвращает информацию обо всех файлах из корневого каталога С, конвертирует информацию о файлах в строку, а затем пишет эту информацию в файл H:\C Listing.txt:
New-Item имеет только одно встроенное дополнительное имя: ni.
Использование Remove-Item
Remove-Item навсегда удаляет ресурс с указанного диска, то есть она не перемещает его в корзину. Таким образом, если вы используете Remove-Item для удаления файла, то нет иного способа вернуть его, кроме как через программу восстановления файлов.
Вы указываете, какой файл должна удалять Remove-Item при помощи параметра –Path. Он позиционный, поэтому вам не нужно указывать имя параметра –Path, если оно идет сразу же за именем команды. Например, вот команда для удаления файла test.txt, который был ранее скопирован в папку C:\Backups\Scripts:
Давайте рассмотрим другой пример. Следующая команда удаляет все файлы. txt (что указано в параметре –Include) в папке C:\Scripts, кроме тех файлов, которые имеют слово test где-либо в файловом имени (что указано в параметре –Exclude):
Будучи, по сути, опасным инструментом, Remove-Item предоставляется с парой элементов защиты. Прежде всего, если вы пытаетесь удалить все из папки, которая содержит непустые подпапки, вы получите запрос на подтверждение Confirm. Например, предположим, что C:\Scripts содержит непустые подпапки и вы запускаете такую команду:
Нужно подтвердить, что вы хотите удалить непустые подпапки, как показано на экране 7.
Экран 7. Запрос на подтверждение удаления при использовании Remove-Item |
Если вы хотите запустить сценарий, который использует Remove-Itemм для удаления всего содержимого папок, включая содержимое подпапок, вам нужен способ запускать Remove-Item без участия пользователя. Этот способ – включение флажка –Recurse.
Второй элемент защиты – это параметр –WhatIf. Если вы включаете его в команду Remove-Item, то PowerShell покажет, какие элементы будут удалены, вместо того, чтобы просто удалить их. В силу деструктивной природы операций удаления, имеет смысл выполнять пробное применение команды Remove-Item с параметром –WhatIf, как здесь:
Экран 8. Применение Remove-Item с параметром -WhatIf Parameter |
Что касается дополнительных имен, то Remove-Item стоит особняком. У него шесть псевдонимов: del, erase, rd, ri, rm и rmdir.
Использование Rename-Item
Команда Rename-Item используется, когда вы хотите переименовать ресурс внутри пространства имен, предоставленного провайдером PowerShell. Первый параметр Rename-Item – это –Path, а второй параметр -NewName. Параметр –NewName, как и следовало ожидать, задает новое имя ресурса. Если Rename-Item обнаруживает не только имя, но и путь, он выдаст ошибку. Например, если вы хотите сменить имя файла C Listing.txt из корневого каталога Н на имя c_listing.txt, вам потребуется запустить такую команду:
Поскольку -Path и -NewName являются позиционными параметрами, вы можете пропускать имена параметров до тех пор, пока они находятся в ожидаемых позициях:
Например, следующая команда перечисляет все файлы в текущем каталоге и переименовывает каждый файл, заменяя все пробелы в файловых именах на подчеркивания:
Rename-Item имеет два псевдонима: ren и rni.
Великолепная семерка
В данном руководстве я познакомил вас со способами взаимодействия PowerShell с файлами. В частности, мы изучили встроенные команды PowerShell, предназначенные для работы с файлами. Это Get-ChildItem, Get-Item, Copy-Item, Move-Item, New-Item, Remove-Item и Rename-Item.
Как выполнить поиск файлов в командной оболочке PowerShell?
Содержание
Командлет Поиска Файлов
Поиск файлов в PowerShell осуществляется с помощью командлета Get-ChildItem . Вызов данного командлета без аргументов выполнит вывод содержимого текущей директории.
У данного командлета присутствуют несколько псевдонимов (aliases) - ls , dir , gci .
Разберем аргументы командлета позволяющие выполнить поиск файлов.
Поиск По Маске
Аргументы командлета Get-ChildItem позволяют выполнить поиск файлов. Доступные параметры, маска имени файла (-Filter), стартовая директория поиска (-Path), и возможность рекурсивного поиска в поддиректориях (-Recurse).
Поиск по маске, для примера осуществим вывод всех файлов с расширением ZIP.
Файловые маски не могут содержать регулярных выражений, только стандартные "*" (любое количество символов) и "?" (один любой символ).
Как можно заметить, указывать параметр -Filter не обязательно, командлет сам понимает что ему была передана фильтрующая маска. Порядок следования параметров без их конкретного указания можно посмотреть во встроенной справке.
Параметр -Path позволяет задать путь начала поиска. Так же он допускает использовать символы файловых масок. Можно совмещать комбинацию фильтров в параметре -Path и -Filter.
Выведем содержимое диска C:\.
По умолчанию, выводится только содержимое текущей директории, но для полноценного поиска файлов необходимо выполнить обход всех файлов во всех поддиректориях. Осуществить такой обход позволяет параметр -Recurse.
Попробуем найти все файлы с расширением *.msc на диске C:\.
Как вы могли заметить, при выводе содержимого диска C:\ отсутствовали скрытые файлы. Отображение скрытых и системных файлов задается атрибутами, о которых поговорим далее.
Поиск По Атрибутам
По умолчанию, скрытые файлы не попадают выходной список командлета Get-ChildItem . Вывод файлов с различными атрибутами, такими как скрытый, системный и прочее, можно задать с помощью параметра -Attributes.
Возможные значения для данного параметра можно посмотреть во встроенной справке по командлету ( Get-ChildItem -? ).
Важные, или популярные, атрибуты вынесены в отдельные параметры, а именно -Directory, -File, -System, -Hidden.
Попробуем посмотреть файлы скрытые файлы на диске C:\.
При указании параметра -Hidden выводятся только скрытые файлы и папки.
С параметром -Attributes все иначе. Он позволяет комбинировать файловые атрибуты. Доступны три операции:
! - NOT, исключает файлы с данным атрибутом (!Directory)
+ - AND, включает файлы со всеми указанными атрибутами (System+Hidden)
, - OR, включает файлы с хотя бы с одним указанным атрибутом (System, Hidden, Directory)
Модификаторы можно комбинировать.
Сами названия атрибутов можно сокращать, что собственно и было продемонстрировано выше.
Поиск По Дате
Список файлов полученный с помощью вышеописанных способов можно отфильтровать по дате. Делается это с помощью передачи результатов выполнения командлета Get-ChildItem командлету Where-Object .
Пример фильтрации вывода команды по дате, с применением псевдонимов.
Для командлета Where-Object можно задать так же другие условия, или даже несколько условий. Подробнее об этом можно узнать в справке по данному командлету.
Поиск По Содержимому
Поиск по содержимому, предполагает обход всех файлов с целью найти в них искомый текст. Выполнить данную операцию можно с помощью передачи всех файлов по конвейеру командлету Select-String .
Для примера я создал три текстовых файла с текстом:
1.txt (first)
2.txt (second)
3.txt (first second third)
Структура расположения файлов следующая.
Теперь примеры поиска текста в данных файлах с помощью PowerShell.
Использование Найденных Файлов
Полученные списки файлов, всеми вышеописанными способами, можно передавать по конвейеру таким командлетам как Remove-Item , Move-Item , Copy-Item и прочим подобным. Тем самым упрощая работу с полученными файлами.
Поставщик файловой системы PowerShell позволяет получать, добавлять, изменять, очищать и удалять файлы и каталоги в PowerShell.
Диски файловой системы — это иерархическое пространство имен, содержащее каталоги и файлы на компьютере. Диск файловой системы может быть логическим или физическим диском, каталогом или сопоставленным сетевым ресурсом.
Поставщик FileSystem поддерживает следующие командлеты, описанные в этой статье.
Типы, предоставляемые этим поставщиком
Файлы являются экземплярами класса System. IO. FileInfo . Каталоги являются экземплярами класса System. IO. DirectoryInfo .
Навигация по дискам файловой системы
Поставщик FileSystem предоставляет свои хранилища данных путем сопоставления логических дисков на компьютере с дисками PowerShell. Для работы с диском файловой системы можно изменить расположение на диск, используя имя диска, за которым следует двоеточие ( : ).
Вы также можете работать с поставщиком FileSystem с любого другого диска PowerShell. Чтобы сослаться на файл или каталог из другого расположения, используйте имя диска ( C: , D: . ) в пути.
PowerShell использует Псевдонимы для предоставления привычного способа работы с путями поставщика. Команды, такие как dir и ls , теперь являются псевдонимами для Get-ChildItem, cd являются псевдонимом для Set-Location. и pwd — это псевдоним для Get-Location.
Получение файлов и каталогов
Get-ChildItem Командлет возвращает все файлы и каталоги в текущем расположении. Можно указать другой путь для поиска и использовать встроенные параметры для фильтрации и управления глубиной рекурсии.
Дополнительные сведения об использовании командлетов см. в статье Get-ChildItem.
Копирование файлов и каталогов
Copy-Item Командлет копирует файлы и каталоги в указанное расположение. Параметры можно использовать для фильтрации и рекурсии, аналогично Get-ChildItem .
следующая команда копирует все файлы и каталоги по пути "C:\temp " в папку" C:\ Windows \temp ".
Copy-Item перезаписывает файлы в целевом каталоге без запроса подтверждения.
Эта команда копирует a.txt файл из C:\a каталога в C:\a\bb каталог.
Копирует все каталоги и файлы из каталога в C:\a C:\c каталог. Если какие-либо копируемые каталоги уже существуют в целевом каталоге, то команда завершится с ошибкой, если не указан параметр Force.
Дополнительные сведения см. в разделе Copy-Item.
Перемещение файлов и каталогов
Эта команда перемещает c.txt файл в C:\a каталог в C:\a\aa Каталог:
Команда не перезапишет автоматически существующий файл с тем же именем. Для принудительной перезаписи существующего файла необходимо задать параметр Force.
Нельзя перемещать каталог, если он совпадает с текущим местоположением. При использовании Move-Item для перемещения каталога в текущем расположении отображается эта ошибка.
Управление содержимым файлов
Получение содержимого файла
Эта команда возвращает содержимое файла "Test.txt" и отображает их в консоли.
Содержимое файла можно передать другому командлету по конвейеру. Например, следующая команда считывает содержимое Test.txt файла и затем передает его в качестве входных данных командлету ConvertTo-HTML :
Можно также получить содержимое файла, указав в качестве пути к нему знак доллара ( $ ). Путь должен быть заключен в фигурные скобки из-за ограничений именования переменных. Дополнительные сведения см. в разделе about_Variables.
Добавление содержимого в файл
Эта команда добавляет строку "тестовое содержимое" в Test.txt файл:
Существующее содержимое в Test.txt файле не удаляется.
Замена содержимого файла
Эта команда заменяет содержимое Test.txt файла строкой "Test Content":
Он перезаписывает содержимое Test.txt . Можно использовать параметр value командлета New-Item , чтобы добавить содержимое в файл при его создании.
Перебрать содержимое файла
По умолчанию Get-Content командлет использует символ конца строки в качестве разделителя, поэтому он получает файл в виде коллекции строк, каждая из которых имеет одну строку в файле.
С помощью параметра можно -Delimiter указать альтернативный разделитель. Если в качестве его значения будут заданы символы, обозначающие конец раздела или начало следующего раздела, файл можно будет разделить на логические части.
Первая команда получает Employees.txt файл и разделяет его на разделы, каждый из которых заканчивается словами "конец записи о сотруднике", и сохраняет его в $e переменной.
Вторая команда использует нотацию массива для получения первого элемента в коллекции в $e . Он использует индекс 0, так как массивы PowerShell отсчитываются от нуля.
Дополнительные сведения о Get-Content командлете см. в разделе справки по разделу Get-Content.
Дополнительные сведения о массивах см. в разделе about_Arrays.
Управление дескрипторами безопасности
Просмотр списка ACL для файла
Чтобы получить дополнительные сведения об этом объекте, передайте команду в командлет Get-Member по конвейеру. Или см. раздел класс FileSecurity .
Изменение ACL для файла
Создание и задание списка управления доступом для файла
Создание файлов и каталогов
Создание каталога
Эта команда создает logfiles каталог на C диске:
PowerShell также включает mkdir функцию (псевдоним md ), которая использует командлет New-Item для создания нового каталога.
Создание файла
Эта команда создает log2.txt файл в C:\logfiles каталоге, а затем добавляет в файл строку "Журнал теста":
Создание файла с содержимым
Создает файл с именем log2.txt в C:\logfiles каталоге и добавляет в файл строку "тестовый журнал".
Переименование файлов и каталогов
Переименуйте файл
Эта команда переименовывает a.txt файл в C:\a каталоге b.txt следующим образом:
Переименование каталога
Эта команда переименовывает C:\a\cc каталог в C:\a\dd :
Удаление файлов и каталогов
Удаление файла
Эта команда удаляет Test.txt файл в текущем каталоге:
Удаление файлов с помощью подстановочных знаков
Эта команда удаляет все файлы в текущем каталоге с .xml расширением имени файла:
Запуск программы путем вызова связанного файла
Вызов файла
Первая команда использует командлет Get-Service для получения сведений о локальных службах.
Он передает сведения в командлет Export-CSV , а затем сохраняет эти сведения в Services.csv файле.
Вторая команда использует Invoke-Item для открытия services.csv файла в программе, связанной с .csv расширением:
Получение файлов и папок с указанными атрибутами
Получение системных файлов
Эта команда возвращает системные файлы в текущем каталоге и его подкаталогах.
Он использует -File параметр для получения только файлов (не каталогов) и -System параметр для получения только элементов с атрибутом System.
Он использует -Recurse параметр для получения элементов в текущем каталоге и всех подкаталогах.
Получение скрытых файлов
Эта команда возвращает все файлы, включая скрытые файлы, в текущем каталоге.
В нем используется параметр Attributes с двумя значениями, !Directory+Hidden , который получает скрытые файлы, и !Directory , который получает все остальные файлы.
dir -att !d,!d+h эквивалентна этой команде.
Получение сжатых и зашифрованных файлов
Эта команда возвращает файлы в текущем каталоге, которые сжаты или зашифрованы.
Он использует -Attributes параметр с двумя значениями Compressed и Encrypted . Значения разделяются запятой, , которая представляет оператор "или".
Динамические параметры
Динамические параметры — это параметры командлета, которые добавляются поставщиком PowerShell и доступны только при использовании командлета на диске с поддержкой поставщика.
Указывает кодировку файла. Значение по умолчанию — ASCII.
- ASCII: использует кодировку для набора символов ASCII (7-разрядных).
- BigEndianUnicode: кодирует в формате UTF-16 с обратным порядком байтов.
- Строка: использует тип кодировки для строки.
- Юникод: кодирует в формате UTF-16 с прямым порядком байтов.
- UTF7: кодирует в формате UTF-7.
- UTF8: кодирует в формате UTF-8.
- UTF8BOM: кодирует в формате UTF-8 с меткой порядка БАЙТОВ (BOM)
- UF8NOBOM: кодирует в формате UTF-8 без метки порядка БАЙТОВ (BOM)
- UTF32: кодирует в формате UTF-32.
- По умолчанию: кодируется на странице установленного по умолчанию кода.
- OEM: использует кодировку по умолчанию для программ MS-DOS и консолей.
- Неизвестно: неизвестный или недопустимый тип кодировки. Данные можно обрабатывать как двоичные.
Поддерживаемые командлеты
Delimiter <System.String>
Указывает разделитель, используемый командлетом Get-Content для разделения файла на объекты при чтении.
Значение по умолчанию — \n , символ конца строки.
При чтении текстового файла командлет Get-Content Возвращает коллекцию строковых объектов, каждая из которых заканчивается символом-разделителем.
При вводе разделителя, который не существует в файле, командлет Get-Content возвращает весь файл как один объект без разделителей.
Этот параметр можно использовать для разбиения большого файла на меньшие файлы, указав разделитель файла, например "Конец примера", в качестве разделителя. Разделитель сохраняется (не удаляется) и становится последним элементом в каждом разделе файла.
В настоящее время, если значение -Delimiter параметра является пустой строкой, командлет Get-Content не возвращает ничего. Это известная проблема Чтобы принудительно применить командлет Get-Content для возврата всего файла в виде единой неразделенной строки, введите значение, которое не существует в файле.
Поддерживаемые командлеты
Wait <System.Management.Automation.SwitchParameter>
Ожидает содержимое для добавления в файл. Если содержимое добавлено, возвращает добавленное содержимое. Если содержимое не изменилось, возвращает весь файл.
Во время ожидания командлет Get-Content проверяет файл раз в секунду, пока не будет прерван, например, нажатием сочетания клавиш CTRL+C.
Поддерживаемые командлеты
Attributes <FlagsExpression>
Извлекает файлы и папки с указанными атрибутами. Этот параметр поддерживает все атрибуты и позволяет указывать сложные сочетания атрибутов.
-Attributes параметр был введен в Windows PowerShell 3,0.
-Attributes Параметр поддерживает следующие атрибуты:
Описание этих атрибутов см. в описании перечисления FileAttributes .
Используйте следующие операторы для объединения атрибутов.
Пробелы между оператором и его атрибутами не допускаются. Однако допустима постановка пробелов перед запятыми.
Поддерживаемые командлеты
Directory <System.Management.Automation.SwitchParameter>
Извлекает каталоги (папки).
-Directory параметр был введен в Windows PowerShell 3,0.
Чтобы получить только каталоги, используйте -Directory параметр и опустите -File параметр. Чтобы исключить каталоги, используйте -File параметр и опустите -Directory параметр, либо используйте -Attributes параметр.
Поддерживаемые командлеты
File <System.Management.Automation.SwitchParameter>
-File параметр был введен в Windows PowerShell 3,0.
Чтобы получить только файлы, используйте -File параметр и опустите -Directory параметр. Чтобы исключить файлы, используйте -Directory параметр и опустите -File параметр, либо используйте -Attributes параметр.
Поддерживаемые командлеты
Hidden <System.Management.Automation.SwitchParameter>
Возвращает только скрытые файлы или каталоги (папки). По умолчанию командлет Get-ChildItem получает только нескрытые элементы.
-Hidden параметр был введен в Windows PowerShell 3,0.
Чтобы получить только скрытые элементы, используйте -Hidden параметр, его h ah псевдонимы или скрытое значение -Attributes параметра. Чтобы исключить скрытые элементы, опустите -Hidden параметр или используйте -Attributes параметр.
Поддерживаемые командлеты
ReadOnly <System.Management.Automation.SwitchParameter>
Извлекает только файлы или каталоги (папки), доступные для чтения.
-ReadOnly параметр был введен в Windows PowerShell 3,0.
Чтобы получить только элементы, доступные только для чтения, используйте -ReadOnly параметр, его ar псевдоним или значение ReadOnly -Attributes параметра. Чтобы исключить элементы, предназначенные только для чтения, используйте -Attributes параметр.
Поддерживаемые командлеты
System <System.Management.Automation.SwitchParameter>
Извлекает только системные файлы или каталоги (папки).
-System параметр был введен в Windows PowerShell 3,0.
Чтобы получить только системные файлы и папки, используйте -System параметр, его as псевдоним или системное значение -Attributes параметра. Чтобы исключить системные файлы и папки, используйте -Attributes параметр.
Поддерживаемые командлеты
NewerThan <System.DateTime>
Возвращает $True , если LastWriteTime значение файла больше указанной даты. В противном случае она возвращает $False .
Введите объект DateTime , например, возвращаемый командлетом Get-Date , или строку, которую можно преобразовать в объект DateTime , например "August 10, 2011 2:00 PM" .
Поддерживаемые командлеты
OlderThan <System.DateTime>
Возвращает $True , если LastWriteTime значение файла меньше указанной даты. В противном случае она возвращает $False .
Введите объект DateTime , например, возвращаемый командлетом Get-Date , или строку, которую можно преобразовать в объект DateTime , например "August 10, 2011 2:00 PM" .
Поддерживаемые командлеты
Stream <System.String>
Управляет альтернативными потоками данных. Введите имя потока. Подстановочные знаки разрешены только в командах Get-Item для и Remove-Item на диске файловой системы.
Поддерживаемые командлеты
Raw <SwitchParameter>
Игнорирует символы новой строки. Возвращает содержимое в виде одного элемента.
Поддерживаемые командлеты
ItemType <String>
Этот параметр позволяет указать те элемента для создания New-Item
Доступные значения этого параметра зависят от текущего используемого поставщика.
В FileSystem диске допустимы следующие значения:
- Файл
- Каталог
- SymbolicLink
- Соединение
- HardLink
Поддерживаемые командлеты
Использование конвейера
Командлеты поставщика принимают входные данные конвейера. Вы можете использовать конвейер для упрощения задачи, отправив данные поставщика из одного командлета другому командлету поставщика. Дополнительные сведения об использовании конвейера с командлетами поставщика см. в справочнике по командлетам, приведенным в этой статье.
Получение справки
Начиная с Windows PowerShell 3.0, стали доступны настраиваемые разделы справки по командлетам поставщика, в которых объясняется поведение этих командлетов на диске файловой системы.
Чтобы получить разделы справки, настроенные для диска файловой системы, выполните команду Get-Help на диске файловой системы или используйте параметр командлета -Path Get-Help , чтобы указать диск файловой системы.
Обычно в процессе работы PowerShell генерируются некоторые выходные данные. Для вывода этих данных существуют специальные Out-командлеты (командлеты, название которых начинается с Out-). Когда выполняемая команда PowerShell возвращает данные, они передаются по конвейеру на вход Out-командлета, который обрабатывает их и отправляет в устройство вывода (на экран, в файл, на принтер и т.п.).
Для просмотра этих командлетов выполним команду:
Get-Command -Verb Out
Out-Host
Командлет Out-Host служит для вывода данных на экран. Например:
Get-Process powershell | Out-Host
Впрочем, добавлять Out-Host в конец команды совсем необязательно. В конце конвейера по умолчанию находится командлет Out-Default, который и перенаправляет все в Out-Host. Т.е. предыдущая команда эквивалентна команде:
Get-Process powershell | Out-Default
которая в свою очередь эквивалентна команде:
На самом деле механизм вывода еще запутаннее. Как вы помните, результатом работы PowerShell являются объекты. Out-командлеты не умеют работать с любыми объектами, а только со специальным типом объектов форматирования, поэтому при получении объекта вызывают один из командлетов форматирования (Format-*). Format-командлет предоставляет Out-командлету объекты форматирования, описывающие порядок построения выходных данных, а Out-командлет отправляет их в нужное устройство. Т.е. при выполнении команды:
в действительности отрабатывает команда:
Get-Process powershell | Format-Table | Out-Host
Хотя добавлять Out-Host в конец команды необязательно, но в некоторых случаях удобно. К примеру он имеет ключ Paging, с помощью которого можно организовать постраничный вывод:
Get-Process | Out-Host -Paging
Out-File
Командлет Out-File перенаправляет выходные данные в указанный файл, например:
Get-Process powershell | Out-File proc.txt
По умолчанию данные в файле перезаписываются. Запретить перезапись существующего файла можно, указав ключ NoClobber, а если необходимо дописывать данные в существующий файл, то можно использовать ключ Append, который добавляет данные в конец файла:
Get-Process powershell | Out-File proc.txt -Append
Для вывода в файл можно использовать сокращенный синтаксис. Например для записи:
Get-Process powershell >proc.txt
или для добавления в конец файла:
Get-Process powershell >>proc.txt
Out-GridView
Командлет Out-GridView выводит данные в виде графической таблицы, в которой их можно отфильтровать и отсортировать по нужному признаку. Для наглядности можно указать ключ Title, который будет отображаться в заголовке:
Get-Process | Out-GridView -Title processes
Начиная стретьей версии PowerShell Out-GridView поддерживает ключ PassThru, позволяющий передать полученные данные дальше по конвейеру. Например, можно вывести список процессов, в графической оснастке отобрать нужные и передать их командлету Stop-Process, который остановит выбранные процессы:
Get-Process | Out-GridView -PassThru | Stop-Process
Out-Null
Командлет Out-Null используется в том случае, если выходные данные отображать не нужно. Он отправляет полученные данные в устройство NULL, т.е. удаляет их. Для примера возьмем такую команду:
$process = Get-WmiObject win32_process -Filter ″Name = ′Notepad.exe′″
$process.Terminate()
Помимо основного действия (остановка процесса) она выводит много лишней информации. Чтобы избавится от нее, отправим вывод в Out-Null, например так:
Out-String
Командлет Out-String преобразует входные данные в массив строк. По сути Out-String преобразует объекты PowerShell в строки, с которыми дальше можно работать как с обычным текстом (форматировать, производить поиск и т.п.).
Для примера выведем процесс, сохраним его в переменную $a и посмотрим тип данных:
$a = Get-Process powershell
$a.GetType()
Затем скормим содержимое Out-String а вывод сохраним в переменную $b:
$b = $a | Out-String
$b.Get-Type()
Как видно из примера, на входе Out-String тип данных Process, а на выходе String.
Out-String принципиально отличается от остальных out-командлетов. Поскольку обычные out-командлеты работают с конечным результатом предыдущих команд, то сами они не производят никаких выходных данных. Именно поэтому out-командлет обычно ставится последним в командной строке, ведь после него в конвейере не остается ничего, с чем могут работать другие командлеты.
В отличие от них Out-String принимает объекты, преобразует их в массив строк и передает дальше по конвейеру. По умолчанию данные накапливаются и возвращаются одной строкой, но с помощью ключа Stream можно указать вывод по отдельной строке для каждого объекта.
Для примера выведем список системных служб со всеми свойствами и отформатируем его в виде таблицы:
Get-Service | Format-Table -Property * -AutoSize
Поскольку ширина консоли граничена 80 символами, то большинство данных будет обрезано, что не очень здорово.
Чтобы не обрезать вывод, направим его в Out-String и увеличим ширину:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024
Теперь все данные попали на экран, но все равно выглядит не очень.
Исправим положение, передав вывод Out-String командлету Out-File:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File service.txt
На выходе получаем файл с таблицей нужной ширины, а для просмотра есть полоса прокрутки. Таким образом можно создавать и просматривать таблицы практически любой ширины.
Out-Printer
Командлет Out-Printer перенаправляет вывод на принтер. Например:
Get-Service | Format-Table -Property * -AutoSize | Out-File service.txt -Width 1024
Get-Content service.txt | Out-Printer
Вывод отправляется на принтер, заданный в системе по умолчанию. Для указания альтернативного принтера можно использовать ключ Name.
Для открытия файлов и чтения его содержимого используется команда Powershell Get-Content. В этой статье рассмотрим работу команды с открытием файла, построчным чтением, поиском по содержимому строки на примерах.
Получение данных
Get - Content - Path 'C:\Windows\System32\drivers\etc\hosts'Если у вас множество файлов или вы не уверены в назывании, то вы можете использовать подстановку. Символы подстановок бывают следующих типов:
Каждый из символов выше можно применять вместе и неограниченное число раз, в любой части пути и имени.
В этом примере я открою сразу два файла: lmhosts и hosts:
Следующие примеры вернут аналогичный результат:
Get - Content - Path 'C:\Windows\System32\drivers\etc\[l,h]*ost*'Для похожей фильтрации есть следующие параметры, которые так же позволяют использовать символы подстановок:
Полное и построчное чтение с поиском
По умолчанию, если мы будем передавать результат команды через конвейер Powershell вывод будет построчный. Это может составить проблему, так как при дополнительных условиях у нас будет возвращаться одна строка, а не весь текст:
Get - Content - Path 'C:\file*.txt' | Select - String - Pattern 'Line 8' Get - Content - Path 'C:\file*.txt' - Raw | Select - String - Pattern 'Line 8'Если вам вдруг понадобится выводить по 2 или более строк за раз, можно указать их количество через ReadCount:
Get - Content - Path 'C:\file*.txt' - ReadCount 2 | Select - String - Pattern 'Line 8'Разделение файла
Подсчет количества строк
Построчный вывод с командой Powershell позволяет посчитать количество строк во всем файле. Для подсчета используется команда Measure-Object:
Если нужна только цифра, а не объект, можно сделать так:
Кодировки
В параметре -Encoding можно указать следующие кодировки:
- ASCII
- BigEndianUnicode
- BigEndianUTF32
- Byte
- Default
- OEM
- Unicode
- UTF7
- UTF8
- UTF32
Чтения файла под другим пользователем
В этом командлете не предусмотрена возможность открытия файла под другим пользователем. При любых попытках вы будете получать ошибки:
- Access to the path is denied
- The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again withoutspecifying credentials.
Для обхода этих ошибок, если у вас нет другого выхода, нужно использовать Invoke-Command (команда удаленного подключения). Для ее настройки могут потребоваться дополнительные настройки описанные в другой статье.
Читайте также: