Tee-Object
Сохраняет выходные данные команды в файле или переменной, а также отправляет их в конвейер.
Синтаксис
Tee-Object
[-InputObject <PSObject>]
[-FilePath] <String>
[-Append]
[[-Encoding] <Encoding>]
[<CommonParameters>]
Tee-Object
[-InputObject <PSObject>]
-LiteralPath <String>
[[-Encoding] <Encoding>]
[<CommonParameters>]
Tee-Object
[-InputObject <PSObject>]
-Variable <String>
[<CommonParameters>]
Описание
Командлет Tee-Object
перенаправляет выходные данные, то есть отправляет выходные данные команды в двух направлениях (например, буква T). Она сохраняет выходные данные команды в файле или переменной, а также отправляет их в конвейер. Если Tee-Object
является последней командой в конвейере, выходные данные команды отображаются в командной строке.
Примеры
Пример 1. Выходные процессы в файл и в консоль
В этом примере возвращается список процессов, запущенных на компьютере, и результат отправляется в файл. Так как второй путь не указан, процессы также отображаются в консоли.
Get-Process | Tee-Object -FilePath "C:\Test1\testfile2.txt"
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
83 4 2300 4520 39 0.30 4032 00THotkey
272 6 1400 3944 34 0.06 3088 alg
81 3 804 3284 21 2.45 148 ApntEx
81 4 2008 5808 38 0.75 3684 Apoint
...
Пример 2. Выходные процессы в переменную и Select-Object
В этом примере возвращается список процессов, запущенных на компьютере, сохраняется в переменной $proc
и передается в Select-Object
.
Get-Process notepad | Tee-Object -Variable proc | Select-Object processname,handles
ProcessName Handles
----------- -------
notepad 43
notepad 37
notepad 38
notepad 38
Командлет Select-Object
выбирает свойства ProcessName и Handles . Обратите внимание, что $proc
переменная содержит сведения по умолчанию, возвращаемые Get-Process
.
Пример 3. Вывод системных файлов в два файла журнала
В этом примере список системных файлов сохраняется в двух файлах журнала: в накопительном и текущем файле.
Get-ChildItem -Path D: -File -System -Recurse |
Tee-Object -FilePath "c:\test\AllSystemFiles.txt" -Append |
Out-File c:\test\NewSystemFiles.txt
Команда использует Get-ChildItem
командлет для рекурсивного поиска системных файлов на диске D:. Оператор конвейера (|
) отправляет список Tee-Object
в , который добавляет список в файл AllSystemFiles.txt и передает список вниз по конвейеру Out-File
командлету, который сохраняет список в NewSystemFiles.txt file
.
Пример 4. Вывод выходных данных в консоль и использование в конвейере
Этот пример получает файлы в папке, выводит их в консоль, а затем фильтрует файлы для тех, у которых есть определенный блок метаданных передней части. Наконец, в нем перечислены названия статей, имеющих передний план.
$consoleDevice = if ($IsWindows) {
'\\.\CON'
} else {
'/dev/tty'
}
$frontMatterPattern = '(?s)^---(?<FrontMatter>.+)---'
$articles = Get-ChildItem -Path .\reference\7.4\PSReadLine\About\ |
Tee-Object -FilePath $consoleDevice |
Where-Object {
(Get-Content $_ -Raw) -match $frontMatterPattern
}
$articles.Name
Directory: C:\code\docs\PowerShell-Docs\reference\7.4\PSReadLine\About
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 12/13/2022 11:37 AM 384 .markdownlint.yaml
-a--- 4/25/2023 11:28 AM 40194 about_PSReadLine_Functions.md
-a--- 4/25/2023 10:58 AM 10064 about_PSReadLine.md
about_PSReadLine_Functions.md
about_PSReadLine.md
В примере переменной $consoleDevice
присваивается значение консольного устройства текущего терминала. В Windows можно выполнить запись на текущее консольное устройство, перенаправив выходные данные в путь к файлу \\.\CON
. В системах, отличных от Windows, используется путь к файлу /dev/tty
.
Затем переменная задает $frontMatterPattern
регулярное выражение, соответствующее, когда строка начинается с трех дефисов (---
) и имеет любое содержимое перед еще тремя дефисами. Если этот шаблон соответствует содержимому статьи, статья имеет определенный блок метаданных передней части.
Далее в примере используется для Get-ChildItem
извлечения всех файлов в папке About
. Tee-Object
выводит полученные результаты в консоль с помощью параметра FileName . Where-Object
фильтрует файлы, получая их содержимое в виде одной строки с параметром Get-Content
Raw и сравнивая ее с $frontMatterPattern
.
Наконец, в примере выводятся имена файлов в папке с определенным блоком метаданных передней материи.
Параметры
-Append
Указывает, что командлет добавляет выходные данные в указанный файл. Без этого параметра новое содержимое заменяет все существующее содержимое файла без предупреждения.
Этот параметр впервые появился в Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encoding
Указывает тип кодировки для целевого файла. Значение по умолчанию — utf8NoBOM
.
Ниже приведены допустимые значения для этого параметра.
ascii
: использует кодировку для 7-разрядной кодировки ASCII.bigendianunicode
: кодирует в формате UTF-16 с использованием порядка байтов с большим байтом.oem
: использует кодировку по умолчанию для MS-DOS и консольных программ.unicode
: кодирует в формате UTF-16 с использованием порядка байтов с маленьким порядком байтов.utf7
: кодирует в формате UTF-7.utf8
: кодирует в формате UTF-8.utf8BOM
: кодирует в формате UTF-8 с меткой порядка байтов (BOM)utf8NoBOM
: кодирует в формате UTF-8 без метки порядка байтов (BOM)utf32
: кодирует в формате UTF-32.
Начиная с PowerShell 6.2, параметр Encoding также разрешает числовые идентификаторы зарегистрированных кодовых страниц (например -Encoding 1251
, ) или строковые имена зарегистрированных кодовых страниц (например -Encoding "windows-1251"
, ). Дополнительные сведения см. в документации по .NET для Encoding.CodePage.
Этот параметр появился в PowerShell 7.2.
Примечание
UTF-7* больше не рекомендуется использовать. В PowerShell 7.1 выдается предупреждение, если указать utf7
для параметра Encoding .
Type: | Encoding |
Accepted values: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | 1 |
Default value: | UTF8NoBOM |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Указывает файл, в котором этот командлет сохраняет объект в подстановочные знаки, но должен разрешаться в один файл.
Начиная с PowerShell 7, при указании FilePath как \\.\CON
в Windows или /dev/tty
в системах, отличных от Windows, InputObject выводится в консоли. Эти пути к файлам соответствуют консольному устройству текущего терминала в системе, что позволяет вывести InputObject и отправить его в поток вывода с помощью одной команды.
Type: | String |
Aliases: | Path |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-InputObject
Указывает объект, который необходимо показать и сохранить. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты. Вы также можете передать объект в Tee-Object
.
При использовании параметра InputObject с Tee-Object
вместо отправки результатов Tee-Object
команды в значение InputObject обрабатывается как один объект, даже если значение является коллекцией.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
Указывает файл, в который этот командлет сохраняет объект . В отличие от FilePath значение параметра LiteralPath используется именно в том виде, в котором оно вводится. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки предписывают PowerShell не интерпретировать какие-либо символы как escape-последовательности.
Type: | String |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Variable
Указывает переменную, в которую командлет сохраняет объект . Введите имя переменной без предыдущего знака доллара ($
).
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Вы можете передать объекты в этот командлет.
Выходные данные
Этот командлет возвращает объект, который он перенаправляет.
Примечания
PowerShell включает следующие псевдонимы для Tee-Object
:
- Windows:
tee
Можно также использовать Out-File
командлет или оператор перенаправления, которые сохраняют выходные данные в файле, но не отправляют их по конвейеру.
Начиная с PowerShell 6, Tee-Object
при записи в файлы используется кодировка UTF-8 без BOM. Если вам нужна другая кодировка Out-File
, используйте командлет с параметром Encoding .