Одна из первых вещей, которую вы делаете при изучении нового компьютерного языка, — это учитесь вводить и выводить данные. Мы узнали, как сделать вывод из подсказки link: / windows-Introduction_to_PowerShell [Введение в PowerShell]. Если вы помните, мы использовали командлет Write-Output. Теперь пора научиться читать файл и выводить его на экран.

Допустим, у нас есть текстовый файл с именем «C: \ Temp \ Temp.txt», содержащий десять строк. Самый простой способ отобразить эти строки — использовать командлет Get-Content. Вот как выглядит запуск этого командлета для нашего файла: (См. Рисунок 1.)

image

Рисунок 1. Get-Content читает файл.

Что, если вы хотите отобразить только первые три строки файла?

Есть разные способы сделать это, но, пожалуй, самый простой способ — использовать переменные. В PowerShell переменная может иметь любой тип данных, а имя переменной начинается с символа «$». Примеры имен переменных включают «$ myName», «$ numbers», «$ today» и т. Д. Вы присваиваете значение переменной со знаком «=», поэтому допустимой командой PowerShell будет

PS> $myName = 'Barry'

На этом фоне мы теперь знаем достаточно, чтобы отобразить первые три строки нашего файла. Мы присвоим содержимое файла переменной с именем $ lines, а затем отобразим it первые три строки: (см. Рисунок 2.)

image

Рисунок 2. Использование переменной.

Здесь мы назначаем содержимое файла переменной $ lines (которая на самом деле является массивом) и используем синтаксис «[0..2]» для доступа к элементам 0, 1 и 2 массива. Элемент 0 — первая строка; элемент 1 — вторая строка; а элемент 2 — третья строка.

Так же легко получить доступ к последним строкам массива. Это делается с помощью отрицательных индексов, поэтому $ line [-1] является последней строкой массива; $ line [-2] — предпоследняя строка массива; и т.д. На следующем рисунке показано, как отобразить последние три строки нашего файла: (см. рисунок 3.)

image

Рисунок 3. Доступ к массиву с использованием отрицательных индексов.

Другой способ получить текст из файла — найти его и отобразить результаты. Для поиска текста в PowerShell вы используете командлет Select-String. Select-String имеет множество переключателей, которые вы можете увидеть, если попросите помощи по командлету, но простая форма требует, чтобы вы просто указывали имя файла и шаблон, который вы ищете. Поэтому, если бы я хотел найти все строки в моем файле, содержащие текстовую «строку» (а это была бы каждая строка), я мог бы сделать это следующим образом: (См. Рис. 4.)

image

Рисунок 4. Поиск в файле шаблона.

Select-String довольно мощный инструмент, поскольку выполняет поиск с использованием регулярных выражений. (Есть еще одна подсказка под названием «Введение в регулярные выражения».) Итак, если вы хотите найти все строки, начинающиеся с «l» и заканчивающиеся только одной цифрой (то есть все строки, кроме строки 10), это будет выглядеть как это: (См. рисунок 5.)

image

Рисунок 5. Поиск файла с использованием регулярного выражения.

Мы много говорили о чтении файлов, поэтому в заключение поговорим о записи файлов. Конечно, вы можете использовать знакомое «>»

для перенаправления вывода в файл, но в PowerShell вы также можете использовать командлет Out-File для отправки вывода в файл.

Допустим, вы хотите получить список всех активных процессов в вашей системе. Для этого используется командлет Get-Process. Часть выходных данных Get-Process показана здесь: (См. Рисунок 6.)

image

Рисунок 6. Частичный вывод Get-Process.

Обратите внимание, что восьмая строка от последней усечена. Эта строка заканчивается на «vmware-usbarbitrat …​». Если бы мы просто отправили этот вывод в файл, файл также содержал бы эту усеченную строку. Вместо этого мы можем использовать переключатель «-width» Out-File, чтобы указать, что мы хотим большей ширины, чтобы избежать усечения. Вот наша команда, чтобы получить процессы, направить вывод в Out-File и указать ширину вывода:

PS C:\Bat> Get-Process | Out-File C:\Temp\Temp2.txt -width 100

Этот совет (13507) применим к Windows 7, 8 и 10.