С автоматизацией сценарий чтения данных из текстового файла является обычным. У большинства языков программирования есть хотя бы один способ чтения текстовых файлов, и PowerShell здесь не исключение. Команда PowerShell Get-Content
, эквивалентная утилите tail в 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, который включает десять разных фруктов для простоты. Вы будете использовать этот текстовый файл во всех примерах.
Не знаете, какая у вас версия PowerShell? Посетите статью Как проверить вашу версию PowerShell (все способы!).
Чтение текстового файла и возвращение результата в виде массива строк
Команда Get-Content
читает содержимое файла и по умолчанию возвращает каждую строку текстового файла как объект строки. В результате коллекция объектов PowerShell становится массивом объектов строк.
Ниже приведен код, который читает содержимое файла fruits.txt и отображает результат на консоли PowerShell, как показано на скриншоте ниже.

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

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

Чтобы отобразить только пятую строку содержимого, вам нужно будет указать номер индекса 4
, заключенный в квадратные скобки (известные как массивная нотация).
Вы можете заметить, что команда
Get-Content
заключена в скобки. Эта нотация указывает PowerShell выполнить команду, заключенную в скобки, первой перед другими операциями.
На скриншоте ниже вы увидите, что единственным возвращенным результатом является raspberry
, который является элементом с индексом 4
и соответствует пятой строке в текстовом файле.

Get-Content
results.Что если вам нужно получить содержимое в последней строке? К счастью, вам не нужно знать общее количество строк. Вместо этого используйте [-1]
в качестве индекса, и Get-Content
отобразит только последнюю строку файла.
Ограничение количества верхних результатов, возвращаемых Get-Content
Используйте параметр TotalCount
команды Get-Content
, чтобы извлечь определенное количество строк из текстового файла. Параметр TotalCount
принимает значение типа long, что означает максимальное значение 9 223 372 036 854 775 807.
Например, приведенная ниже команда читает содержимое и ограничивает результат тремя элементами.
Как и ожидалось, результат ниже отображает только первые три строки из начала текстового файла.

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

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

wait
and Tail
parameters with Get-Content
.Возвращение результатов в виде одной строки
Возможно, вы заметили в предыдущих примерах, что имели дело с массивами строк как выводом командлета PowerShell Get-Content
. И как вы узнали до этого, природа массивов позволяет вам оперировать содержимым по одному элементу за раз.
Массивы часто работают отлично, но могут затруднить замену строк. Параметр Raw
командлета Get-Content
считывает весь контент файла в единый объект строки. Хотя код ниже такой же, как использованный в первом примере, параметр Raw
сохраняет содержимое файла как единую строку.
На скриншоте ниже показано, что добавление параметра Raw
к командлету Get-Content
приводит к обработке содержимого как единой строки, а не как массива объектов.

Raw
parameter of Get-Content
reads the file content as a single string object.После того как у вас есть содержимое файла в виде единой строки с использованием параметра Raw
, что вы можете с ним сделать? Возможно, вам нужно найти и заменить строку внутри содержимого файла. В приведенном ниже примере Get-Content
считывает содержимое файла как единую строку. Затем, используя оператор replace
, заменяется определенное слово другим.
Связано: Поиск и замена строк

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

.log
files using Add-Content
.После создания тестовых файлов используйте параметры Filter
и Path
, чтобы прочитать только файлы .log
в корневом каталоге. Звездочка, использованная в определении фильтра, указывает Get-Content
прочитать любой файл, оканчивающийся на .log
. Звездочка в конце параметра пути ограничивает чтение файлов только корневым каталогом.
Как показано на примере вывода ниже, отображается только содержимое файлов .log
.

Filter
parameter with PowerShell Get-Content
to limit the read files.Связано: Get-ChildItem: Перечисление файлов, реестра, сертификатов и другого в виде одного списка
Чтение альтернативного потока данных файла
До сих пор вы работали исключительно с текстовыми файлами, но Get-Content
может читать данные из альтернативного потока данных (ADS) файла. Не стесняйтесь читать больше о потоках, но вы можете представить поток как еще один атрибут данных, хранящийся наряду с типичным содержимым файла.
Альтернативные потоки данных – это функция файловой системы Windows NTFS, поэтому это не применимо к
Get-Content
, когда используется с не-Windows операционными системами.
Вы можете увидеть альтернативные потоки данных, запустив Get-Item
с параметром Stream
. При ссылке на файл с использованием параметра Stream
Get-Item
возвращает свойство, называемое Stream
, как показано ниже. Этот поток содержания файла по умолчанию представлен как :$DATA
.
Для демонстрации потока по умолчанию :$DATA
используйте cmdlet Get-Item
, чтобы отобразить все доступные потоки в файле fruits.txt. Как показано ниже, Get-Item
отображает один поток.

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

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

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

Get-Content
to read the Secret
alternate data stream content.Следующие шаги с PowerShell Get-Content
В этой статье вы узнали много способов использования Get-Content
для чтения и манипулирования содержимым. Вы даже узнали, что Get-Content
достаточно гибок, чтобы читать содержимое из альтернативных потоков данных!
С учетом того, что вы узнали в этой статье, какие еще способы использования Get-Content
вы можете применить в своей работе? Возможно, вы можете использовать Get-Content
, чтобы определить, устарел ли файл резервной копии, и запустить автоматический вызов для выполнения резервного копирования?
Source:
https://adamtheautomator.com/powershell-get-content/