Tee-Object
Сохраняет выходные данные команды в файле или переменной, а также отправляет его вниз по конвейеру.
Синтаксис
File (по умолчанию)
Tee-Object
[-FilePath] <String>
[[-Encoding] <Encoding>]
[-InputObject <PSObject>]
[-Append]
[<CommonParameters>]
LiteralFile
Tee-Object
[[-Encoding] <Encoding>]
-LiteralPath <String>
[-InputObject <PSObject>]
[<CommonParameters>]
Variable
Tee-Object
-Variable <String>
[-InputObject <PSObject>]
[<CommonParameters>]
Описание
Командлет записывает выходные Tee-Object данные в двух направлениях. Он сохраняет выходные данные в файле или переменной, а также отправляет его по конвейеру. Если Tee-Object это последняя команда в конвейере, выходные данные команды отображаются в консоли.
Tee-Object Внутренне использует Set-Variable команды и Out-File команды. Эти команды поддерживают параметр WhatIf . Команда Tee-Object не поддерживает параметр WhatIf . Однако если вы упаковываете Tee-Object скрипт или функцию, поддерживающую параметр WhatIf , Tee-Object передает состояние WhatIfSet-Variable в и Out-File команды.
Примеры
Пример 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 filepath. В системах, отличных от Windows, используется /dev/tty файловый путь.
Затем он задает $frontMatterPattern переменную регулярному выражению, которое соответствует, когда строка начинается с трех дефисов (---) и содержит любое содержимое до трех дефисов. Если этот шаблон соответствует содержимому статьи, статья содержит определенный блок метаданных переднего элемента.
Далее в примере используется Get-ChildItem для извлечения каждого файла в папке About .
Tee-Object выводит результаты, которые передаются в консоль, с помощью параметра FileName .
Where-Object фильтрует файлы, получая содержимое в виде одной строки с необработанным параметром Get-Content и сравнивая их со строкой $frontMatterPattern.
Наконец, в примере печатаются имена файлов в папке с определенным блоком метаданных переднего элемента.
Пример 5. Использование tee-Object в скрипте с параметром **WhatIf**
Команда Tee-Object не поддерживает параметр WhatIf . Однако если вы выполняете оболочку Tee-Object в скрипт или функцию, которая поддерживает параметр WhatIf , Tee-Object передает состояние WhatIfSet-Variable в и Out-File команды, которые он использует внутренне.
PS> function Test-Tee {
[Cmdletbinding(SupportsShouldProcess)]
Param()
$true|tee -Variable b
"Variable `$b is set to '$b'"
}
PS> Test-Tee
True
Variable $b is set to 'True'
PS> Test-Tee -WhatIf
True
What if: Performing the operation "Set variable" on target "Name: b Value: True".
Variable $b is set to ''
Параметры
-Append
Указывает, что командлет добавляет выходные данные в указанный файл. Без этого параметра новое содержимое заменяет существующее содержимое в файле без предупреждения.
Этот параметр появился в Windows PowerShell 3.0.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
File
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Encoding
Указывает тип кодирования для целевого файла. Значение по умолчанию — utf8NoBOM.
Допустимые значения для этого параметра приведены следующим образом:
-
ascii: использует кодировку для набора символов ASCII (7-разрядный). -
ansi. Использует кодировку текущей культуры для кодовой страницы ANSI. Этот параметр добавлен в PowerShell 7.4. -
bigendianunicode: кодирует в формате UTF-16 с использованием большого порядка байтов. -
oem. Использует кодировку по умолчанию для MS-DOS и консольных программ. -
unicode: кодирует в формате UTF-16 в порядке байтов младшего разряда. -
utf7: кодирует в формате UTF-7. -
utf8: кодирует в формате UTF-8. -
utf8BOM. Кодирует в формате UTF-8 с пометкой порядка байтов (Byte Order Mark, BOM) -
utf8NoBOM: Кодирует в формате UTF-8 без метки порядка байтов (BOM) -
utf32: кодирует в формате UTF-32.
Начиная с PowerShell 6.2, параметр кодировки
Начиная с PowerShell 7.4, можно использовать значение Ansi для параметра кодировки, чтобы передать числовой идентификатор ANSI-страницы текущей культуры, не указывая его вручную.
Этот параметр появился в PowerShell 7.2.
Замечание
UTF-7* больше не рекомендуется использовать. Начиная с версии PowerShell 7.1, выводится предупреждение, если задать utf7 как параметр кодировки.
Свойства параметра
| Тип: | Encoding |
| Default value: | UTF8NoBOM |
| Допустимые значения: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 1 |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-FilePath
Указывает файл, который этот командлет сохраняет объект в подстановочные знаки, но должен разрешаться в один файл.
Начиная с PowerShell 7, при указании FilePath как \\.\CON в Windows или /dev/tty в системах, отличных от Windows, в консоли выводится inputObject . Эти пути к файлам соответствуют текущему устройству консоли терминала в системе, что позволяет распечатать InputObject и отправить его в выходной поток с одной командой.
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | True |
| DontShow: | False |
| Aliases: | Путь |
Наборы параметров
File
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-InputObject
Указывает объект для сохранения и отображения. Введите переменную, содержащую объекты или введите команду или выражение, которое получает объекты. Можно также передать объект в Tee-Object.
При использовании параметра InputObject с Tee-Objectрезультатами команды , а не с результатами piping, Tee-Objectзначение InputObject обрабатывается как один объект, даже если значение является коллекцией.
Свойства параметра
| Тип: | PSObject |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | True |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-LiteralPath
Указывает файл, в который этот командлет сохраняет объект. В отличие от FilePath, значение параметра LiteralPath используется точно так, как введено. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell на то, что не следует интерпретировать какие-либо символы как управляющие последовательности.
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | PSPath, LP |
Наборы параметров
LiteralFile
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Variable
Указывает переменную, в которую командлет сохраняет объект. Введите имя переменной без предыдущего знака доллара ($).
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
Variable
| Position: | Named |
| Обязательно: | True |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
PSObject
Объекты можно передать в этот командлет.
Выходные данные
PSObject
Этот командлет возвращает объект, который он перенаправляет.
Примечания
PowerShell включает следующие псевдонимы для Tee-Object:
- Виндоус:
tee
Можно также использовать Out-File командлет или оператор перенаправления, оба из которых сохраняют выходные данные в файле, но не отправляют его в конвейер.
Начиная с PowerShell 6, Tee-Object использует кодировку UTF-8 без BOM при записи в файлы. Если вам нужна другая кодировка, используйте Out-File командлет с параметром кодирования .