Powershell читать файл построчно

Обновлено: 21.11.2024

При автоматизации чтение данных из текстового файла является распространенным сценарием. Большинство языков программирования имеют по крайней мере один способ чтения текстовых файлов, и PowerShell не является исключением. Командлет PowerShell Get-Content, аналог хвостовой части PowerShell, считывает содержимое текстового файла и импортирует данные в сеанс PowerShell.

Командлет PowerShell Get-Content – это незаменимый инструмент, когда вам нужно использовать текстовые файлы в качестве входных данных для вашего сценария. Возможно, вашему сценарию PowerShell необходимо прочитать список компьютеров, чтобы отслеживать или импортировать шаблон электронной почты для отправки пользователям. PowerShell Get-Content легко поддерживает эти сценарии!

Как насчет отслеживания файла журнала в режиме реального времени? Да, PowerShell Get-Content тоже может это сделать! Продолжайте читать эту статью, и вы узнаете, как использовать командлет Get-Content для чтения текстовых файлов в PowerShell.

Оглавление

Предпосылки

Если вы хотите следовать примерам из этого руководства, вам потребуются следующие требования.

  • Вам потребуется компьютер под управлением Windows 10. В этом руководстве используется Windows 10 версии 20H2. Но не волнуйтесь, вам подойдет и та версия Windows 10, которая у вас есть.
  • На вашем компьютере должна быть установлена ​​как минимум Windows PowerShell 5.1 или PowerShell 7.1. Здесь используется PowerShell 7.1, но подойдет любая версия!
  • Вы будете писать и тестировать команды, поэтому вам понадобится редактор кода. Рекомендуемыми редакторами являются Windows PowerShell ISE, встроенный в Windows, и Visual Studio Code (VSCode). В этой статье используется VSCode.
  • Это также поможет, если вы создадите рабочий каталог на своем компьютере. Рабочая папка может быть где угодно. Однако вы заметите, что примеры в этом руководстве находятся в папке C:\demo.
  • Для начала вам понадобится контент! Создайте в своем рабочем каталоге файл с именем fruits.txt, который для простоты включает десять разных фруктов. Вы будете использовать этот текстовый файл во всех примерах.

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

Командлет Get-Content считывает содержимое из файла и по умолчанию возвращает каждую строку текстового файла в виде строкового объекта. В результате коллекция объектов PowerShell становится массивом строковых объектов.

Приведенный ниже код считывает содержимое файла fruits.txt и отображает результат в консоли PowerShell, как показано на снимке экрана ниже.

Получение содержимого текстового файла с помощью PowerShell Get-Content .

Командлет Get-Content считывает и сохраняет содержимое в виде массива, но как узнать это наверняка? Сначала сохраните содержимое в объект PowerShell, который затем можно проверить, чтобы определить тип.

На приведенном ниже снимке экрана переменная $fruits представляет собой массив, содержащий десять объектов. Каждый объект представляет собой одну строку текста.

Подтверждение того, что содержимое текстового файла сохранено в виде массива.

Возврат определенной строки из текстового файла

В предыдущем примере вы узнали, что результатом Get-Content по умолчанию является массив или набор объектов. Каждому элементу в коллекции соответствует номер индекса, а индексы PowerShell обычно начинаются с нуля.

На приведенном ниже снимке экрана показано, что в массиве строк есть десять элементов. Массив проиндексировал десять элементов от нуля до девяти.

Показывая, что индексированные элементы в массиве строк начинаются с нулевого индекса.

Чтобы отобразить только пятую строку содержимого, необходимо указать номер индекса 4 , заключенный в квадратные скобки (известный как запись массива).

Вы можете заметить, что команда Get-Content заключена в круглые скобки. Эта нотация указывает PowerShell, что сначала нужно выполнить команду, заключенную в круглые скобки, перед другими операциями.

На приведенном ниже снимке экрана вы увидите, что единственным возвращаемым результатом является raspberry , который является элементом с индексом 4 и соответствует пятой строке в текстовом файле.

Возврат определенной строки из результатов Get-Content.

Что делать, если вам нужно получить содержимое последней строки? К счастью, вам не нужно знать общее количество строк. Вместо этого используйте [-1] в качестве индекса, и Get-Content отобразит только последнюю строку файла.

Ограничение количества лучших результатов, возвращаемых Get-Content

Используйте параметр TotalCount командлета Get-Content для извлечения указанного количества строк из текстового файла. Параметр TotalCount принимает значение long, что означает максимальное значение 9 223 372 036 854 775 807.

Например, приведенная ниже команда считывает содержимое и ограничивает результат тремя элементами.

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

Чтение первых трех результатов с помощью команды Get-Content и параметра TotalCount.

Использование хвостового параметра PowerShell для возврата результатов из конца файла

В предыдущем примере вы использовали командлет PowerShell Get-Content для чтения текстового файла и ограничения результатов. Также можно добиться обратного с помощью PowerShell Get-Content. Используйте параметр хвоста PowerShell, чтобы прочитать указанное количество строк с конца файла.

Приведенный ниже пример кода считывает текстовый файл и отображает содержимое четырех нижних строк.

После выполнения команды tail PowerShell ожидаемый результат будет ограничен последними четырьмя строками содержимого, как показано на изображении ниже.

Получение результатов из конца файла с помощью параметра Get-Content Tail.

Параметр Tail часто используется вместе с параметром Wait. Использование параметра ожидания сохраняет файл открытым и проверяет наличие нового содержимого каждую секунду. Демонстрация ниже показывает параметры Tail и Wait в действии. Чтобы выйти из ожидания, используйте комбинацию клавиш CTRL+C.

Возврат результатов в виде одной строки

Вы, возможно, заметили в предыдущих примерах, что имели дело со строковыми массивами в качестве выходных данных PowerShell Get-Content. И, как вы уже узнали, природа массивов позволяет вам работать с содержимым по одному элементу за раз.

Массивы часто прекрасно работают, но могут затруднить замену строк. Параметр Raw команды Get-Content считывает все содержимое файла в один строковый объект. Хотя приведенный ниже код такой же, как и в первом примере, параметр Raw сохраняет содержимое файла в виде одной строки.

На приведенном ниже снимке экрана показано, что добавление параметра Raw в Get-Content приводит к обработке содержимого как одной строки, а не массива объектов.

Подтверждение того, что параметр Raw командлета Get-Content считывает содержимое файла как один строковый объект.

Если у вас есть содержимое файла в одной строке с использованием параметра Raw, что вы можете с ним сделать? Возможно, вам нужно найти и заменить строку внутри содержимого этого файла. В приведенном ниже примере Get-Content считывает содержимое файла как одну строку. Затем с помощью оператора замены замените одно слово другим.

Чтение содержимого текстового файла как одной строки и замена слова с помощью оператора замены.

Чтение содержимого только из файлов, соответствующих фильтру

У вас есть папка, полная файлов, но вам нужно прочитать содержимое нескольких избранных? С PowerShell Get-Content вам не нужно отдельно фильтровать файлы перед чтением их содержимого. Параметр Filter командлета Get-Content ограничивает файлы, которые читает командлет.

Чтобы продемонстрировать чтение содержимого только выбранных файлов, сначала создайте пару файлов для чтения. Как показано ниже, создайте файлы в своей рабочей папке с помощью Add-Content .

Создание тестовых файлов .log с помощью Add-Content .

После создания тестовых файлов используйте параметры «Фильтр» и «Путь», чтобы читать файлы .log только в корневом каталоге. Звездочка, используемая в определении фильтра, указывает командлету Get-Content прочитать любой файл, оканчивающийся на .log . Конечная звездочка параметра пути ограничивает чтение файлов только корневым каталогом.

Как показано в приведенном ниже выводе, отображается только содержимое файлов .log.

Использование параметра Filter с PowerShell Get-Content для ограничения файлов на чтение.

Чтение альтернативного потока данных файла

До сих пор вы работали исключительно с текстовыми файлами, но командлет Get-Content может считывать данные из альтернативного потока данных (ADS) файла. Не стесняйтесь читать больше о потоках, но вы можете думать о потоке как о другом атрибуте данных, хранящемся вместе с типичным содержимым файла.

Альтернативные потоки данных — это функция файловой системы Windows NTFS, поэтому она не применяется к Get-Content при использовании с операционными системами, отличными от Windows.

Вы можете увидеть альтернативные потоки данных, запустив Get-Item с параметром Stream. При ссылке на файл с использованием параметра Stream командлет Get-Item возвращает свойство с именем Stream, как показано ниже. Этот поток содержимого файла по умолчанию представлен с помощью :$DATA .

Чтобы продемонстрировать поток :$DATA по умолчанию, используйте командлет Get-Item для отображения всех доступных потоков в файле fruits.txt. Как показано ниже, Get-Item отображает один поток.

Вывод списка всех доступных потоков в файле с помощью Get-Item .

Параметр Stream команды Get-Content явно считывает содержимое потока по умолчанию :$DATA, как показано ниже. Возвращаемое содержимое совпадает с выводом Get-Content по умолчанию, поскольку поток :$DATA считывается по умолчанию.

Явное чтение потока :$DATA с помощью Get-Content .

Чтобы продемонстрировать получение альтернативного потока данных с помощью Get-Content , измените файл с помощью Add-Content, чтобы добавить новый поток. Используйте Get-Item, чтобы отобразить новый поток рядом с потоком по умолчанию :$DATA, как показано в приведенном ниже примере.

Добавление секретного альтернативного потока данных с помощью Add-Content и отображение нового потока с помощью Get-Item.

Поскольку по умолчанию считывается только поток :$DATA, используйте параметр Stream командлета Get-Content для получения содержимого нового секретного потока. Как показано ниже, содержимое секретного потока отображается вместо содержимого файла по умолчанию.

Использование командлета Get-Content для чтения содержимого секретного альтернативного потока данных.

Дальнейшие шаги с PowerShell Get-Content

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

С учетом того, что вы узнали из этой статьи, как еще вы можете использовать Get-Content в своей работе? Возможно, вы можете использовать Get-Content, чтобы определить, устарел ли файл резервной копии, и инициировать автоматический вызов для запуска задания резервного копирования?

Ненавидите рекламу? Хотите поддержать писателя? Получите многие из наших руководств в виде руководства по ATA.

Ещё от ATA Learning & Partners

Резервное копирование Office 365 для чайников

Лучшее руководство по защите данных Microsoft Office 365. Изучите готовые функции безопасности.

Руководства ATA

ATA известна своими высококачественными письменными учебными пособиями в виде сообщений в блогах. Поддержите ATA с помощью электронных книг ATA Guidebook PDF, доступных в автономном режиме и без рекламы!

Получает содержимое элемента в указанном месте.

Синтаксис

Описание

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

Начиная с PowerShell 3.0 командлет Get-Content также может получить указанное количество строк от начала или конца элемента.

Примеры

Пример 1. Получение содержимого текстового файла

В этом примере показано получение содержимого файла в текущем каталоге. Файл LineNumbers.txt содержит 100 строк в формате «Это строка X» и используется в нескольких примерах.

Значения массива от 1 до 100 передаются по конвейеру командлету ForEach-Object. ForEach-Object использует блок сценария с командлетом Add-Content для создания файла LineNumbers.txt. Переменная $_ представляет значения массива, когда каждый объект отправляется по конвейеру. Командлет Get-Content использует параметр Path для указания файла LineNumbers.txt и отображает содержимое в консоли PowerShell.

Пример 2. Ограничьте количество строк, возвращаемых Get-Content

Эта команда получает первые пять строк файла. Параметр TotalCount используется для получения первых пяти строк содержимого. В этом примере используется файл LineNumbers.txt, созданный в примере 1.

Пример 3. Получение определенной строки содержимого из текстового файла

Эта команда получает определенное количество строк из файла, а затем отображает только последнюю строку этого содержимого. Параметр TotalCount получает первые 25 строк содержимого. В этом примере используется файл LineNumbers.txt, созданный в примере 1.

Команда Get-Content заключена в круглые скобки, поэтому команда завершается до перехода к следующему шагу. Get-Content возвращает массив строк, это позволяет добавить обозначение индекса после круглых скобок для получения определенного номера строки. В этом случае индекс [-1] указывает последний индекс в возвращаемом массиве из 25 извлеченных строк.

Пример 4. Получение последней строки текстового файла

Эта команда получает последнюю строку содержимого из файла. В этом примере используется файл LineNumbers.txt, созданный в примере 1.

В этом примере используется командлет Get-Item, чтобы продемонстрировать, что вы можете передавать файлы в параметр Get-Content. Параметр Tail получает последнюю строку файла. Этот метод быстрее, чем извлечение всех строк и использование записи индекса [-1].

Пример 5. Получение содержимого альтернативного потока данных

В этом примере показано, как использовать параметр Stream для получения содержимого альтернативного потока данных для файлов, хранящихся на томе Windows NTFS. В этом примере командлет Set-Content используется для создания образца контента в файле с именем Stream.txt .

Параметр Stream — это динамический параметр поставщика файловой системы. По умолчанию Get-Content извлекает данные только из потока по умолчанию или :$DATA. Потоки можно использовать для хранения скрытых данных, таких как атрибуты, параметры безопасности или другие данные. Их также можно хранить в каталогах, не являясь дочерними элементами.

Пример 6. Получение необработанного контента

Команды в этом примере получают содержимое файла в виде одной строки, а не массива строк. По умолчанию без динамического параметра Raw содержимое возвращается в виде массива строк, разделенных новой строкой. В этом примере используется файл LineNumbers.txt, созданный в примере 1.

Пример 7. Использование фильтров с Get-Content

Вы можете указать фильтр для командлета Get-Content. При использовании фильтров для уточнения параметра Path необходимо добавить завершающую звездочку ( * ), чтобы указать содержимое пути.

Следующая команда получает содержимое всех файлов *.log в каталоге C:\Temp.

Пример 8: Получить содержимое файла в виде массива байтов

В этом примере показано, как получить содержимое файла в виде [байта[]] как отдельного объекта.

Первая команда использует параметр AsByteStream для получения потока байтов из файла. Параметр Raw гарантирует, что байты будут возвращены как [System.Byte[]] . Если параметр Raw отсутствовал, возвращаемое значение представляет собой поток байтов, который PowerShell интерпретирует как [System.Object[]] .

Параметры

Указывает, что содержимое должно считываться как поток байтов. Параметр AsByteStream появился в Windows PowerShell 6.0.

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

Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Этот параметр не поддерживается ни одним поставщиком, установленным вместе с PowerShell.Чтобы выдать себя за другого пользователя или повысить свои учетные данные при запуске этого командлета, используйте Invoke-Command.

< /tr>
Тип:PSCredential
Позиция:Имя
Значение по умолчанию:Текущий пользователь
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает разделитель, который командлет Get-Content использует для разделения файла на объекты во время чтения. По умолчанию используется \n, символ конца строки. При чтении текстового файла командлет Get-Content возвращает набор строковых объектов, каждый из которых заканчивается символом конца строки. При вводе разделителя, которого нет в файле, командлет Get-Content возвращает весь файл как единый объект без ограничений.

Этот параметр можно использовать для разделения большого файла на файлы меньшего размера, указав разделитель файлов в качестве разделителя. Разделитель сохраняется (не отбрасывается) и становится последним элементом в каждом разделе файла.

Разделитель — это динамический параметр, который поставщик файловой системы добавляет в командлет Get-Content. Этот параметр работает только на дисках с файловой системой.

В настоящее время, когда значением параметра Delimiter является пустая строка, командлет Get-Content ничего не возвращает. Это известная проблема. Чтобы заставить Get-Content возвращать весь файл как одну неограниченную строку. Введите значение, которого нет в файле.

Тип:Строка
Позиция:Именованный
Значение по умолчанию:Символ конца строки
Принять ввод конвейера:False< /td>
Допускать подстановочные знаки:False

Указывает тип кодировки для целевого файла. Значение по умолчанию — utf8NoBOM .

Для этого параметра допустимы следующие значения:

  • ascii : использует кодировку для набора символов ASCII (7-бит).
  • bigendianunicode : кодирует в формате UTF-16, используя порядок байтов с обратным порядком байтов.
  • bigendianutf32 : кодирует в формате UTF-32, используя порядок байтов с обратным порядком байтов.
  • oem : использует кодировку по умолчанию для MS-DOS и консольных программ.
  • Unicode : кодирует в формате UTF-16, используя порядок байтов с прямым порядком байтов.
  • utf7 : кодирует в формате UTF-7.
  • utf8 : кодирует в формате UTF-8.
  • utf8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM).
  • utf8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM).
  • utf32 : кодирует в формате UTF-32.

Кодировка — это динамический параметр, который поставщик файловой системы добавляет в командлет Get-Content. Этот параметр доступен только для дисков с файловой системой.

При чтении и записи в двоичные файлы используйте параметр AsByteStream и значение 0 для параметра ReadCount. Значение ReadCount, равное 0, считывает весь файл за одну операцию чтения. Значение ReadCount по умолчанию, равное 1, считывает один байт в каждой операции чтения и преобразует каждый байт в отдельный объект, что вызывает ошибки при использовании командлета Set-Content для записи байтов в файл, если вы не используете параметр AsByteStream.

UTF-7* больше не рекомендуется использовать. Начиная с PowerShell 7.1, выдается предупреждение, если вы укажете utf7 для параметра Encoding.

Тип:Кодировка
Допустимые значения:ASCII, BigEndianUnicode, BigEndianUTF32, OEM , Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Позиция:По имени
Значение по умолчанию:UTF8NoBOM
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Указывает в виде массива строк элемент или элементы, которые этот командлет исключает из операции. Значение этого параметра определяет параметр Path.

Введите элемент пути или шаблон, например *.txt . Подстановочные знаки разрешены.

Параметр Exclude действует, только если команда включает содержимое элемента, например C:\Windows\* , где подстановочный знак указывает содержимое каталога C:\Windows.

Тип:Строка [ ]
Позиция:Название
Значение по умолчанию:Нет
Принять ввод конвейера:False< /td>
Допускать подстановочные знаки:True

Указывает фильтр для уточнения параметра Path. Поставщик FileSystem — это единственный установленный поставщик PowerShell, который поддерживает использование фильтров. Вы можете найти синтаксис языка фильтров файловой системы в about_Wildcards. Фильтры более эффективны, чем другие параметры, потому что поставщик применяет их, когда командлет получает объекты, а не PowerShell фильтрует объекты после их извлечения.

Тип:Строка
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:True

Force переопределит атрибут только для чтения или создаст каталоги для завершения пути к файлу. Параметр Force не пытается изменить права доступа к файлам или переопределить ограничения безопасности.

Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:False
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Указывает в виде массива строк элемент или элементы, которые этот командлет включает в операцию. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например "*.txt" . Подстановочные знаки разрешены. Параметр Include действует, только если команда включает содержимое элемента, например C:\Windows\* , где подстановочный знак указывает содержимое каталога C:\Windows.

Тип:Строка [ ]
Позиция:Название
Значение по умолчанию:Нет
Принять ввод конвейера:False< /td>
Допускать подстановочные знаки:True

Указывает путь к одному или нескольким расположениям. Значение LiteralPath используется точно так, как оно введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки сообщают PowerShell, что никакие символы не следует интерпретировать как управляющие последовательности.

Тип:String [ ]
Псевдонимы:PSPath, LP
Позиция:Имя
Значение по умолчанию:Нет< /td>
Принимать ввод конвейера:True
Допускать подстановочные знаки: Ложь

Указывает путь к элементу, из которого Get-Content получает содержимое. Подстановочные знаки разрешены. Пути должны быть путями к элементам, а не к контейнерам. Например, вы должны указать путь к одному или нескольким файлам, а не путь к каталогу.

Тип:Строка [ ]
Позиция:0
Значение по умолчанию:Нет
Принять ввод конвейера:True< /td>
Допускать подстановочные знаки:True

Игнорирует символы новой строки и возвращает все содержимое файла в одной строке с сохранением новых строк. По умолчанию символы новой строки в файле используются в качестве разделителей для разделения ввода на массив строк. Этот параметр появился в PowerShell 3.0.

Raw — это динамический параметр, который поставщик файловой системы добавляет в командлет Get-Content. Этот параметр работает только на дисках файловой системы.

Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Определяет, сколько строк содержимого отправляется через конвейер за раз. Значение по умолчанию — 1. Значение 0 (ноль) отправляет все содержимое одновременно.

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

Тип:Int64
Позиция:Имя
Значение по умолчанию:1
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Этот параметр доступен только в Windows.

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

Поток — это динамический параметр, который поставщик файловой системы добавляет в командлет Get-Content. Этот параметр работает только на дисках файловой системы в системах Windows.

Этот параметр появился в Windows PowerShell 3.0. В PowerShell 7.2 командлет Get-Content может извлекать содержимое альтернативных потоков данных как из каталогов, так и из файлов.

Тип:Строка
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Указывает количество строк от конца файла или другого элемента. Вы можете использовать имя параметра Tail или его псевдоним Last.Этот параметр появился в PowerShell 3.0.

< /tr>

Указывает количество строк от начала файла или другого элемента. Значение по умолчанию: -1 (все строки).

Можно использовать имя параметра TotalCount или его псевдонимы, First или Head.

Тип:Int32
Псевдонимы:Последний
Позиция:Имя
Значение по умолчанию:Нет
Принимать ввод конвейера:Истина
Допускать подстановочные знаки:Ложь
Тип:Int64
Псевдонимы:Первый, Глава
Позиция:Имя
Значение по умолчанию:-1
Принимать ввод конвейера:True
Допускать подстановочные знаки:False

Оставляет файл открытым после вывода всех существующих строк. Во время ожидания Get-Content проверяет файл каждую секунду и выводит новые строки, если они есть. Вы можете прервать ожидание, нажав CTRL+C. Ожидание также заканчивается, если файл удаляется, и в этом случае сообщается о постоянной ошибке.

Wait — это динамический параметр, который поставщик файловой системы добавляет в командлет Get-Content. Этот параметр работает только на дисках с файловой системой. Ожидание нельзя сочетать с Raw.

Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:False
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Входные данные

System.Int64, System.String[], System.Management.Automation.PSCredential

Вы можете передать количество прочтений, общее количество, пути или учетные данные в Get-Content .

Результаты

System.Byte, System.String

Get-Content возвращает строки или байты. Тип вывода зависит от типа содержимого, которое вы указываете в качестве входных данных.

Примечания

Командлет Get-Content предназначен для работы с данными, предоставленными любым поставщиком. Чтобы получить поставщиков в сеансе, используйте командлет Get-PSProvider. Дополнительные сведения см. в разделе about_Providers.

Если у вас есть текстовый файл с данными, которые вы хотите использовать, вы можете использовать PowerShell Get-Content для вывода содержимого файла. Затем используйте цикл PowerShell ForEach для прохода по файлу строка за строкой.

Вы также можете использовать командлет ForEach-Object для перебора содержимого файла, указанного с помощью команды Get-Content.

Наконец, в выводе команды Get-Content есть метод ForEach. Вы также можете использовать метод ForEach для повторения содержимого текстового файла.

Просмотреть темы сообщений

Как использовать Get-Content для просмотра содержимого файла

Прежде чем вы сможете повторить содержимое текстового файла с помощью PowerShell ForEach, вы должны получить список содержимого с помощью команды Get-Content.

Общий синтаксис команды Get-Content:…

Команда Get-Content считывает содержимое текстового файла построчно. Затем он возвращает коллекцию объектов.

Кроме того, объект в коллекции объектов представляет собой строку содержимого в текстовом файле. Этот момент важен, потому что он означает, что мы можем получить доступ к отдельным объектам, возвращаемым командой Get-Content.

Именно это дает нам возможность использовать PowerShell ForEach для повторения содержимого текстового файла — строка за строкой.

Еще одна важная функция команды Get-Content заключается в том, что она может считывать заданное количество строк с начала или с конца текстового файла.

Чтобы запустить примеры в этом руководстве, выполните следующую команду:

Вот содержимое текстового файла, используемого в команде. Команда выводит содержимое файла и сохраняет его в переменной с именем files.

Наконец, чтобы проиллюстрировать мое предыдущее замечание о чтении указанного количества строк в начале или конце файла, выполните следующую команду:

Команда считывает первые три строки указанного текстового файла. Это определяется параметром Head.

Вот результат команды…

Кроме того, вы можете вернуть последние «N» строк с помощью параметра Tail команды Get-Content.

Вот пример команды, которая возвращает последние 4 строки файла…

А вот и результат команды…

Как использовать цикл PowerShell ForEach и Get-Content для итерации по файлу

Во введении к этому руководству я упомянул, что первым шагом к повторению содержимого текстового файла с помощью PowerShell является составление списка его содержимого.

Я также упомянул, что после просмотра содержимого текстового файла с помощью команды Get-Content вы можете использовать PowerShell ForEach для повторения содержимого текстового файла.

Наконец, я упомянул, что вы можете перебирать текстовый файл с помощью цикла PowerShell ForEach, командлета ForEach-Object или метода ForEach.

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

В этом разделе я научу вас синтаксису цикла ForEach. Затем я покажу вам пример Powershell ForEach $file In $files — по сути, использование цикла ForEach для итерации файлов, хранящихся в нашей переменной files.

Синтаксис цикла PowerShell ForEach

Синтаксис цикла PowerShell ForEach Loop…

В синтаксисе $files представляет собой переменную со списком элементов. В этом примере переменная $files является результатом команды Get-Content, показанной ниже…

Возвращаясь к синтаксису цикла ForEach PowerShell, переменная $file представляет каждый элемент, сохраненный в переменной $files.

Кроме того, каждый раз, когда цикл ForEach проходит цикл, он сохраняет одну из переменных $files во временной переменной $file. Затем он использует эту временно сохраненную переменную в командной скобке <> ForEach.

Пример Powershell для каждого $file в $files

В последнем подразделе я показал вам синтаксис цикла ForEach Loop как…

Я также объяснил, что в каждом цикле цикла Powershell ForEach он сохраняет один из объектов, сохраненных в переменной $files, во временной переменной с именем $file.

В этом разделе я буду использовать этот принцип для повторения содержимого текстового файла, сохраненного в переменной $files. Затем в командной части цикла ForEach я буду использовать команду New-Item для создания папки с элементами, сохраненными во временной переменной $file.

Вот команда, которая выполняет эту работу…

Прежде чем запустить команду, сделайте скриншот папки D:\PS-Tutorial\ForEachEx

.

Чтобы запустить сценарий, скопируйте его в новый документ в PowerShel ISE. Затем запустите скрипт, щелкнув выделенный значок.

После запуска команды папки создаются в D:\PS-Tutorial\ForEachEx:

Если вы забыли, это те же элементы, что и в моем исходном текстовом файле!

По сути, цикл PowerShell ForEach перебирает содержимое текстового файла (возвращаемое командой Get-Content). Затем использовал результаты для создания новой папки…

Как использовать PowerShell ForEach-Object и Get-Content для перебора файлов

В предыдущем разделе я показал, как использовать цикл PowerShell ForEach для повторения содержимого текстового файла, возвращаемого командой Get-Content.

В этом разделе я покажу вам, как использовать командлет ForEach-Object для выполнения той же задачи. Но сначала давайте начнем с синтаксиса команды ForEach-Object.

Синтаксис команды PowerShell ForEach-Object

Для практических целей синтаксис команды PowerShell ForEach-Object выглядит следующим образом…

PowerShell ForEach-Object берет значения объектов из конвейера и запускает команду, указанную в командном блоке <> ForEach-Object.

В отличие от цикла PowerShell ForEach, где в каждом цикле объект сохраняется в указанной временной переменной, в PowerShell ForEach-Object объект сохраняется во временной автоматической переменной «объект в текущем конвейере», $_ .

Наконец, PowerShell ForEach-Object использует автоматическую переменную $_ в качестве входных данных для запуска команды в блоке command <>.

Подробнее в следующем подразделе…

Пример Powershell ForEach-Object $_ In $files

В этом примере я буду использовать содержимое файла, сохраненного в переменной $files, для создания папок. Пример аналогичен тому, что мы делали в разделе «Цикл по каждому элементу».

Однако вместо цикла ForEach мы будем использовать командлет ForEach-Object.

Прежде чем я продолжу, давайте посмотрим на скриншот исходного текстового файла.

Кроме того, вот скрипт, который сохраняет содержимое файла в переменную $files.

Теперь, когда мы вспомнили исходный текстовый файл, давайте посмотрим, как использовать этот файл в команде PowerShell ForEach-Object.

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

В этом сценарии я хочу создать папки в другой папке, D:\PS-Tutorial\ForEach-ObjectEx. Чтобы убедиться, что папка пуста перед запуском скрипта, вот скриншот…

Чтобы запустить скрипт, скопируйте его в PowerShell ISE и запустите.

После запуска сценария новые папки (с именами файлов в текстовом файле) теперь создаются в D:\PS-Tutorial\ForEach-ObjectEx.

Как использовать метод PowerShell ForEach() и Get-Content для итерации по файлу

До сих пор в этом руководстве рассматривалось, как составить список содержимого текстового файла с помощью команды Get-Content. Я также рассказал, как перебирать содержимое текстового файла с помощью цикла PowerShell ForEach и команды ForEach-Object Cdlet.

В этом разделе вы узнаете, как повторять содержимое текстового файла с помощью метода PowerShell ForEach. Как и в других разделах, я начну этот раздел с синтаксиса метода PowerShell ForEach.

Синтаксис PowerShell ForEach() Метод Команда

Синтаксис команды метода ForEach() в PowerShell…

Как и во всех методах PowerShell, для доступа к методу ForEach введите точку после объекта, а затем слово ForEach.

Затем после ForEach введите открывающую скобку (. Далее вы вводите командный блок <> — ваши команды выполняются внутри этого блока.

Наконец, закройте блок ForEach Method закрывающей скобкой ).

Как и команда ForEach-Object, метод ForEach использует временную автоматическую переменную "объект в текущем конвейере" $_.

В следующем подразделе вы узнаете, как использовать метод ForEach.

Пример Powershell ForEach() $_ в $files

Сценарий в этом разделе обращается к методу ForEach в переменной $files — переменной, созданной с помощью этой команды…

Вот скрипт, который использует метод ForEach для повторения содержимого текстового файла, сохраненного в переменной $files. Затем создает папку с каждым элементом.

В этом примере я буду создавать папки по пути D:\PS-Tutorial\ForEachMethodEx. Еще раз, чтобы убедиться, что папка пуста, прежде чем запускать приведенный выше скрипт, вот скриншот папки…

Как и два других скрипта, для запуска этого скрипта скопируйте его в PowerShell ISE.

Как только я запустил скрипт, он создал папки, используя информацию из текстового файла.

Вот оно! Наша обновленная версия «Как выполнить итерацию содержимого текстового файла в Powershell».

Вы нашли это руководство, потому что искали «foreach in file powershell» или его вариант. Надеюсь, я смог ответить на ваш вопрос.

Если я ответил на ваш вопрос, пожалуйста, проголосуйте за "Был ли этот пост полезным" ниже.

Кроме того, вы можете задать вопрос, оставить комментарий или оставить отзыв с помощью формы "Оставить ответ" в конце этой страницы.

Наконец, чтобы получить дополнительные технические руководства по PowerShell, посетите нашу страницу с практическими рекомендациями по Windows PowerShell. Вам также может быть очень полезна наша страница Работа с домашней страницы.

Текстовые файлы распространены повсеместно, и вам придется их читать, независимо от вашей роли или должностных обязанностей. На самом деле, как ИТ-специалисту, вам придется создавать, читать или работать с текстовыми файлами чаще, чем вы думаете, потому что текстовые файлы бывают самых разных форматов. Эта гибкость также сделала текстовые файлы наиболее удобным способом определения сценариев, хранения сведений о конфигурации и многого другого. PowerShell понимает важность текстовых файлов и упрощает извлечение текста и чтение из них. В этой статье мы увидим, как можно прочитать текстовый файл в PowerShell.

Чтение всего содержимого

Шаттерсток

Если вы хотите прочитать все содержимое текстового файла, проще всего использовать встроенную функцию Get-Content.

Вот код, который позволяет это сделать:

При выполнении этой команды содержимое этого файла будет отображаться в командной строке или на экране PowerShell ISE, в зависимости от того, где вы его выполняете.

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

$file_data = Get-Content C:\logs\log01012020.txt

Теперь вы можете использовать эту переменную $file_data для синтаксического анализа или дальнейшей обработки.

Чтение частичного содержания

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

Как следует из кода, первые 10 строк содержимого будут храниться в переменной, а не все содержимое. Вы можете отобразить содержимое этой переменной или использовать ее для дальнейшей обработки.

Точно так же мы можем прочитать и последние несколько строк:

Построчное чтение

Если вы хотите прочитать файл, чтобы понять его содержимое, вам придется делать это по одной строке за раз, и хорошая новость заключается в том, что это возможно с помощью PowerShell.

На самом деле, это можно сделать двумя способами.

Использование Get-Content

Функция Get-Content считывает каждую строку текста и сохраняет их в виде массива, где каждая строка является элементом массива. В приведенном выше примере мы использовали переменную для чтения всего содержимого.

$file_data = Get-Content C:\logs\log01012020.txt

Если вы напечатаете тип этой переменной, вы увидите, что это массив.

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

И это покажет вам первую строку.

Появится вторая строка и т. д.

Использование класса StreamReader

$stream_reader = Новый объект System.IO.StreamReader

Теперь у вас есть содержимое файла журнала в этой переменной $stream_reader, и, поскольку он принадлежит классу StreamReader, вы можете использовать множество встроенных методов для получения нужного текста.

… это выведет все содержимое на ваш экран, аналогично Get-Content.

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

Но само по себе это может быть бесполезно, поэтому вам придется запускать его в цикле и читать содержимое текстового файла построчно.

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

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

Поиск определенного текста

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

$file_data = Get-Content C:\logs\log01012020.txt | Где-объект

Приведенный выше код выведет те строки, в которых есть слово «ошибка». Здесь $_ — это конвейерная переменная, представляющая текущую строку из содержимого, полученного из Get-Content.

Помимо Where-Object, вы также можете использовать операторы match и regex, чтобы найти именно тот текст, который вам нужен.

Дополнительные параметры с Get-Content

Get-Content – это универсальный командлет с множеством параметров. Вот что вы можете с ним сделать.

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

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

$file_data = Get-Content C:\logs\log01012020.txt | Объект измерения

Определенное количество строк в начале и в конце

Ранее мы видели, как выбрать несколько первых или последних строк с помощью командлета Select-Object. Вы также можете получить те же результаты, используя некоторые встроенные методы Get-Content.

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

$file_data = Get-Content C:\logs\log01012020.txt -TotalCount 3

Это вернет первые три строки из файла.

$file_data = Get-Content C:\logs\log01012020.txt -Tail 3

Эта команда вернет последние три строки из файла.

Постоянно обновляемый файл

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

$file_data = Get-Content C:\logs\log01012020.txt -Tail 3 -Подождите

Эта команда будет постоянно отслеживать в файле журнала новые строки, которые добавляются в него, и будет отображать то же самое для вас.

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

Читайте также: