Вывести содержимое каталога windows powershell

Содержание
  1. Открываем файл и читаем его содержимое с Get-Content в Powershell
  2. Получение данных
  3. Полное и построчное чтение с поиском
  4. Разделение файла
  5. Подсчет количества строк
  6. Кодировки
  7. Чтения файла под другим пользователем
  8. Непрерывное чтение
  9. Ограничение вывода строк
  10. Поиск файлов по содержимому
  11. Изменение файла с последующей записью
  12. Подсчет четных чисел в файле
  13. Работа с файлами, папками и разделами реестра Working With Files, Folders and Registry Keys
  14. Перечисление файлов, папок и разделов реестра (Get-ChildItem) Enumerating Files, Folders, and Registry Keys (Get-ChildItem)
  15. Перечисление всех элементов в контейнере (-Recurse) Listing all Contained Items (-Recurse)
  16. Фильтрация элементов по имени (-Name) Filtering Items by Name (-Name)
  17. Принудительное перечисление скрытых элементов (-Force) Forcibly Listing Hidden Items (-Force)
  18. Сопоставление имен элементов с подстановочными знаками Matching Item Names with Wildcards
  19. Исключение элементов (-Exclude) Excluding Items (-Exclude)
  20. Смешение параметров Get-ChildItem Mixing Get-ChildItem Parameters

Открываем файл и читаем его содержимое с Get-Content в Powershell

Для открытия файлов и чтения его содержимого используется команда Powershell Get-Content. В этой статье рассмотрим работу команды с открытием файла, построчным чтением, поиском по содержимому строки на примерах.

Навигация по посту

Получение данных

Для открытия файла ‘C:\text.txt’ можно использовать следующую команду:

Если у вас множество файлов или вы не уверены в назывании, то вы можете использовать подстановку. Символы подстановок бывают следующих типов:

  • ‘*’ — говорит об неизвестном количестве символов;
  • [a,b] — говорит, что в этом месте может быть буква ‘a’ или ‘b’;
  • ? — обозначает один неизвестный символ.

Каждый из символов выше можно применять вместе и неограниченное число раз, в любой части пути и имени.

В этом примере я открою сразу два файла: lmhosts и hosts:

Следующие примеры вернут аналогичный результат:

Для похожей фильтрации есть следующие параметры, которые так же позволяют использовать символы подстановок:

  • Include — в этом параметре мы добавляем шаблон, по которому будем включать файл;
  • Exclude — с помощью этого параметра исключает файлы;
  • Filter — исключает результаты.

Для каждого из этих параметров есть обязательно условие — использовать знак ‘*’ в конце пути.

Так мы вернем все файлы с расширением ‘.txt’:

В отличие от Filter, в Include и Exclude мы можем использовать несколько значений. В этом примере мы откроем файлы формата ‘.txt’ и ‘.ini’:

Полное и построчное чтение с поиском

По умолчанию, если мы будем передавать результат команды через конвейер Powershell вывод будет построчный. Это может составить проблему, так как при дополнительных условиях у нас будет возвращаться одна строка, а не весь текст:

Что бы текст передавался полностью, а не построчно — используйте параметр Raw:

Если вам вдруг понадобится выводить по 2 или более строк за раз, можно указать их количество через ReadCount:

Разделение файла

Файл выводится построчно из-за делиметра (разделителя), который по умолчанию равен ‘\n’ (идентификатор новой строки). Мы можем разделить файл иначе, например, использовав точку с запятой:

То есть результат выше — это массив. В массивах Powershell мы можем получать содержимое по индексам. В следующем примере я просто уберу точку с запятой:

Подсчет количества строк

Построчный вывод с командой Powershell позволяет посчитать количество строк во всем файле. Для подсчета используется команда Measure-Object:

Если нужна только цифра, а не объект, можно сделать так:

Кодировки

В параметре -Encoding можно указать следующие кодировки:

Как искать файлы используя Powershell Get-ChildItem

Чтения файла под другим пользователем

В этом командлете не предусмотрена возможность открытия файла под другим пользователем. При любых попытках вы будете получать ошибки:

  • Access to the path is denied
  • The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.
Читайте также:  Карвальо windows server 2012 hyper v

Для обхода этих ошибок, если у вас нет другого выхода, нужно использовать Invoke-Command (команда удаленного подключения). Для ее настройки могут потребоваться дополнительные настройки описанные в другой статье.

Сам процесс открытия файла под другим пользователем будет выглядеть так:

Непрерывное чтение

С помощью параметра Wait вы можете читать файл, который в этот момент обновляется системой или другим пользователем:

Ограничение вывода строк

Можно ограничить вывод содержимого файла указав количество нужных строк в начале или конце:

  • Head — выведет указанное количество строк с начала;
  • Tail — выведет указанное количество строк с конца.

Так будут выведены только первые 5 строк:

Создание и изменение в Powershell NTFS разрешений ACL

Поиск файлов по содержимому

Get-Content не позволяет искать и открывать фалы находящиеся внутри других каталогов. Такой поиск называется рекурсивным и он доступен в Get-ChildItem.

В следующем примере мы вернем файлы из всех каталогов и подкаталогов:

File — возвращает только файлы. Каталоги нам не нужны.

С Get-ChildItem вы так же можете использовать Include,Exclude и Filter, которые были рассмотрены раннее. Использовать эти ключи лучше всего в первой команде т.к. это будет работать быстрее.

Через конвейер мы сможем открыть каждый файл, а с Select-Sting проверить есть ли в нем нужный текст. Так мы найдем файл с Powershell, который содержит строку ‘127.0.0.1’ в папке Windows:

Если убрать параметр Raw, то у нас выведется только та строка, которую мы искали:

Изменение файла с последующей записью

Вы так же можете изменить содержимое файла и перезаписать этот файл. Представим, что вам нужно заменить адрес ‘127.0.0.1’ в строке — это можно сделать так:

Или с помощью регулярного выражения (не точный шаблон):

Для записи в файл у нас есть два варианта. Первый — это использовать перенаправление в виде знака ‘>’, который перезапишет все содержимое файла или создаст новый файл:

Второй вариант — использовать команду Set-Content:

Функции по работе со строками в Powershell

Подсчет четных чисел в файле

У меня есть файл ‘file.txt’ со следующим содержанием:

Шаблон регулярного выражения ‘\d*\.?\d*’ говорит, что мы ищем число, после которого может быть точка, после которого могут быть еще числа. Таким образом мы захватим целые и числа с плавающей точкой.

Для выделения таких чисел из строк нужно использовать Select-String:

Нам нужно отформатировать вывод убрав пустые строки и получить значения свойства Value:

Мы можем вернуть остаток от деления использовав %. Если число делится на 2 с остатком 0, то оно будет четным:

Работа с файлами, папками и разделами реестра Working With Files, Folders and Registry Keys

Windows PowerShell использует существительное Item , чтобы ссылаться на элементы, найденные на диске Windows PowerShell. Windows PowerShell uses the noun Item to refer to items found on a Windows PowerShell drive. При работе с поставщиком FileSystem Windows PowerShell Item может быть файлом, папкой или диском Windows PowerShell. When dealing with the Windows PowerShell FileSystem provider, an Item might be a file, a folder, or the Windows PowerShell drive. Создание списков элементов и работа с ними является критически важной задачей в большинстве административных учреждений, поэтому необходимо подробно обсудить ее. Listing and working with these items is a critical basic task in most administrative settings, so we want to discuss these tasks in detail.

Перечисление файлов, папок и разделов реестра (Get-ChildItem) Enumerating Files, Folders, and Registry Keys (Get-ChildItem)

Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem предназначен специально для возврата всех элементов, найденных в контейнере, например в папке. Since getting a collection of items from a particular location is such a common task, the Get-ChildItem cmdlet is designed specifically to return all items found within a container such as a folder.

Читайте также:  Installing windows on vmware esxi

Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите: If you want to return all files and folders that are contained directly within the folder C:\Windows, type:

Списки выглядят аналогично тем спискам, которые появляются при вводе команды dir в Cmd.exe или команды ls в командной оболочке UNIX. The listing looks similar to what you would see when you enter the dir command in Cmd.exe , or the ls command in a UNIX command shell.

С помощью параметров командлета Get-ChildItem можно создавать очень сложные списки. You can perform very complex listings by using parameters of the Get-ChildItem cmdlet. Далее рассмотрим несколько сценариев. We will look at a few scenarios next. Синтаксис командлета Get-ChildItem можно увидеть, введя следующее. You can see the syntax the Get-ChildItem cmdlet by typing:

Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных. These parameters can be mixed and matched to get highly customized output.

Перечисление всех элементов в контейнере (-Recurse) Listing all Contained Items (-Recurse)

Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem . To see both the items inside a Windows folder and any items that are contained within the subfolders, use the Recurse parameter of Get-ChildItem . В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. The listing displays everything within the Windows folder and the items in its subfolders. Пример: For example:

Фильтрация элементов по имени (-Name) Filtering Items by Name (-Name)

Чтобы отобразить только имена элементов, используйте параметр Name для Get-Childitem . To display only the names of items, use the Name parameter of Get-Childitem :

Принудительное перечисление скрытых элементов (-Force) Forcibly Listing Hidden Items (-Force)

В выходных данных команды Get-ChildItem не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Items that are normally invisible in File Explorer or Cmd.exe are not displayed in the output of a Get-ChildItem command. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem . To display hidden items, use the Force parameter of Get-ChildItem . Пример: For example:

Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды Get-ChildItem . This parameter is named Force because you can forcibly override the normal behavior of the Get-ChildItem command. Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности. Force is a widely used parameter that forces an action that a cmdlet would not normally perform, although it will not perform any action that compromises the security of the system.

Сопоставление имен элементов с подстановочными знаками Matching Item Names with Wildcards

Команда Get-ChildItem принимает подстановочные знаки в пути к элементам списка. The Get-ChildItem command accepts wildcards in the path of the items to list.

Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. Because wildcard matching is handled by the Windows PowerShell engine, all cmdlets that accepts wildcards use the same notation and have the same matching behavior. В нотацию подстановочных знаков Windows PowerShell входит: The Windows PowerShell wildcard notation includes:

Звездочка ( * ) соответствует нулю или большему количеству вхождений любого символа. Asterisk ( * ) matches zero or more occurrences of any character.

Знак вопроса ( ? ) соответствует ровно одному символу. Question mark ( ? ) matches exactly one character.

Читайте также:  Не открываются плитки windows 10

Открывающая квадратная скобка ( [ ) и закрывающая квадратная скобка ( ] ) заключают в себя набор символов для сопоставления. Left bracket ( [ ) character and right bracket ( ] ) character surround a set of characters to be matched.

Далее приводится несколько примеров работы спецификации из подстановочных знаков. Here are some examples of how wildcard specification works.

Чтобы найти в каталоге Windows все файлы, имеющие суффикс .log и ровно пять символов в основном имени, введите следующую команду. To find all files in the Windows directory with the suffix .log and exactly five characters in the base name, enter the following command:

Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x , введите следующее. To find all files that begin with the letter x in the Windows directory, type:

Чтобы найти все файлы с именами, начинающимися на x или z, введите следующее. To find all files whose names begin with «x» or «z», type:

Дополнительные сведения о подстановочных знаках см. в разделе about_Wildcards. For more information about wildcards, see about_Wildcards.

Исключение элементов (-Exclude) Excluding Items (-Exclude)

Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem . You can exclude specific items by using the Exclude parameter of Get-ChildItem . Это позволит вам выполнить сложную фильтрацию в одном операторе. This lets you perform complex filtering in a single statement.

Например, вы пытаетесь найти библиотеку службы времени Windows в папке System32 и все, что вам известно об имени библиотеки, — то, что оно начинается с W и содержит 32. For example, suppose you are trying to find the Windows Time Service DLL in the System32 folder, and all you can remember about the DLL name is that it begins with «W» and has «32» in it.

Такое выражение, как w*32*.dll , найдет все библиотеки DLL, которые отвечают этим условиям, но вам может потребоваться дополнительно отфильтровать файлы и пропустить все файлы win32. An expression like w*32*.dll will find all DLLs that satisfy the conditions, but you may want to further filter out the files and omit any win32 files. Эти файлы можно пропустить с помощью параметра Exclude с шаблоном win* . You can omit these files by using the Exclude parameter with the pattern win* :

Смешение параметров Get-ChildItem Mixing Get-ChildItem Parameters

В одной команде можно использовать несколько параметров командлета Get-ChildItem . You can use several of the parameters of the Get-ChildItem cmdlet in the same command. Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Before you mix parameters, be sure that you understand wildcard matching. Например, следующая команда не возвращает результатов: For example, the following command returns no results:

Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows. There are no results, even though there are two DLLs that begin with the letter «z» in the Windows folder.

Результаты не возвращены, так как подстановочный знак указан как часть пути. No results were returned because we specified the wildcard as part of the path. Хотя команда и была рекурсивной, командлет Get-ChildItem ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .dll . Even though the command was recursive, the Get-ChildItem cmdlet restricted the items to those that are in the Windows folder with names ending with .dll .

Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр Include . To specify a recursive search for files whose names match a special pattern, use the Include parameter.

Оцените статью