Первое, что вы делаете при изучении нового компьютерного языка, – это учитесь вводить и выводить данные. Мы узнали, как делать выходные данные из подсказки Введение в PowerShell. Если вы помните, мы использовали командлет Write-Output. Теперь пора научиться читать файл и выводить его на экран.
Допустим, у нас есть текстовый файл с именем «C: Temp Temp.txt», содержащий десять строк. . Самый простой способ отобразить эти строки – использовать командлет Get-Content. Вот как выглядит запуск этого командлета для нашего файла: (см. Рисунок 1.)
Рис. 1. Get-Content читает файл.
Что делать, если вы хотите отобразить только первые три строки файла ? Есть разные способы сделать это, но, пожалуй, самый простой способ – использовать переменные. В PowerShell переменная может иметь любой тип данных, а имя переменной начинается с символа «$». Примеры имен переменных включают «$ myName», «$ numbers», «$ today» и т. Д. Вы присваиваете значение переменной со знаком «=», поэтому допустимой командой PowerShell будет
PS> $ myName = 'Barry'
На этом фоне мы теперь знаем достаточно, чтобы отобразить первые три строки нашего файла. Мы назначим содержимое файла переменной с именем $ lines, а затем отобразим ее первые три строки: (см. Рисунок 2)
Рисунок 2. Использование переменной.
Здесь мы назначаем содержимое файла переменной $ lines (которая на самом деле является массивом) и используем синтаксис «[0..2]» для доступа к элементам 0, 1 и 2 массива. Элемент 0 – первая строка; элемент 1 – вторая строка; а элемент 2 – третья строка.
Так же легко получить доступ к последним строкам массива. Это делается с помощью отрицательных индексов, поэтому $ line [-1] является последней строкой массива; $ line [-2] – предпоследняя строка массива; и т.д. На следующем рисунке показано, как отобразить последние три строки нашего файла: (см. рисунок 3.)
Рис. 3. Доступ к массиву с использованием отрицательных индексов.
Другой способ получить текст из файла – это найдите его и отобразите результаты. Для поиска текста в PowerShell вы используете командлет Select-String. Select-String требует множества переключателей, которые вы можете увидеть, если попросите помощи по командлету, но простая форма требует, чтобы вы просто указывали имя файла и шаблон, который вы ищете. Поэтому, если бы я хотел найти все строки в моем файле, содержащие текстовую «строку» (а это была бы каждая строка), я мог бы сделать это следующим образом: (См. Рисунок 4.)
Рис. 4. Поиск в файле шаблона.
Select-String – довольно мощный инструмент, поскольку он выполняет поиск с использованием регулярных выражений. (Есть еще одна подсказка под названием «Введение в регулярные выражения».) Итак, если вы хотите найти все строки, начинающиеся с «l» и заканчивающиеся только одной цифрой (то есть все строки, кроме строки 10), это будет выглядеть так: это: (См. рисунок 5.)
Рисунок 5. Поиск файла с использованием регулярного выражения.
Мы много говорили о чтении файлов, поэтому мы должны закончить, поговорив о записи файлов. Конечно, вы можете использовать знакомый символ «>» для перенаправления вывода в файл, но в PowerShell вы также можете использовать командлет Out-File для отправки вывода в файл.
Скажем, вы хотели получить список всех активных процессов в вашей системе. Для этого используется командлет Get-Process. Часть вывода Get-Process показана здесь: (см. Рисунок 6.)
Рис. 6. Частичный вывод Get-Process.
Обратите внимание, что восьмая строка от последней усечена. Эта строка заканчивается на «vmware-usbarbitrat …». Если бы мы просто отправили этот вывод в файл, файл также содержал бы эту усеченную строку. Вместо этого мы можем использовать переключатель «-width» Out-File, чтобы указать, что мы хотим большей ширины, чтобы избежать усечения. Вот наша команда для получения процессов, конвейера вывода в Out-File и указания ширины вывода:
PS C: Bat> Get-Process | Исходящий файл C: Temp Temp2.txt -width 100