Продолжим говорить о выводе информации в Windows PowerShell.
При работе с Windows PowerShell иногда возникает необходимость сохранить полученную информацию в файл или распечатать её на бумажном носителе. Сделать это можно при помощи командлетов Out-File и Out-Printer, а также стандартных операторов.
Начнем с командлета Out-File.
Вот пример сохранения информации в файл:
Get-Process | Out-File -FilePath c:\process.txt -Encoding "Default"
В этом конвейере мы сначала выводим список процессов, а потом сохраняем его в файл process.txt на диске C.
Теперь внимательнее разберем параметры командлета Out-File.
Параметр | Описание |
-FilePath | Указывает путь к файлу. Если такой файл уже есть, он будет перезаписан (чтобы избежать этого, см. параметры -Append и -NoClobber). |
-Encoding | Отвечает за кодировку файла. Может принимать значения: Unicode, UTF7, UTF8, UTF32, ASCII, BigEndianUnicode, Default и OEM. По умолчанию используется кодировка Unicode. Для сохранения в Windows-кодировке используйте Default, для сохранения в DOS-кодировке используйте OEM. |
-Width | Указывает число знаков в каждой выходной строке. |
-Append | Записывает данные в конец существующего файла, а не перезаписывает его. |
-NoClobber | Запрещает перезапись файла. При одновременном использовании параметров -Append и -NoClobber данные в конец существующего файла. |
Второй способ сохранения данных в файл это использование стандартных операторов > и >>.
Если мы введем в терминале
Get-Process > c:\process.txt
результат будет тот же самый.
Если нам надо добавить информацию в конец существующего файла, а не перезаписывать его, то используем оператор >>.
Get-Process >> c:\process.txt
Теперь о выводе данных на печать.
Здесь всё довольно просто. Конвейер
Get-Process | Out-Printer
выведет данные на принтер по умолчанию. Если же надо вывести данные на другой принтер, то используйте параметр -Name.
Например:
Get-Process | Out-Printer -Name "HP LaserJet 1018 PCL 6"
как сохранить данные в файл но чтоб файл менял свое имя в зависимости от названия компьютера?
Здесь помогут переменные среды Windows, а именно $($env:COMPUTERNAME). Продолжая пример из статьи, это будет выглядеть так:
Get-Process | Out-File -FilePath c:\$($env:COMPUTERNAME)-process.txt -Encoding «Default»