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>]
Description
cmdlet은 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
cmdlet은 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
이 명령은 cmdlet을 Get-ChildItem
사용하여 D: 드라이브의 시스템 파일에 대한 재귀 검색을 수행합니다. 파이프라인 연산자(|
)는 목록을 Tee-Object
보내 목록을 AllSystemFiles.txt 파일에 추가하고 목록을 cmdlet에 Out-File
전달하여 목록을 cmdlet에 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
3개의 대시(---
)로 시작하고 다른 세 개의 대시 앞에 내용이 있을 때 일치하는 정규식으로 변수를 설정합니다. 이 패턴이 아티클의 콘텐츠와 일치하면 문서에 정의된 전면 문제 메타데이터 블록이 있습니다.
다음으로, 이 예제에서는 폴더의 모든 파일을 검색하는 About
데 사용합니다Get-ChildItem
. Tee-Object
는 FileName 매개 변수를 사용하여 파이프된 결과를 콘솔에 출력합니다. Where-Object
는 원시 매개 변수 Get-Content
를 사용하여 콘텐츠를 단일 문자열로 가져오고 해당 문자열 $frontMatterPattern
을 .와 비교하여 파일을 필터링합니다.
마지막으로, 이 예제에서는 정의된 전면 문제 메타데이터 블록이 있는 폴더에 있는 파일의 이름을 출력합니다.
매개 변수
-Append
cmdlet이 지정된 파일에 출력을 추가한다는 것을 나타냅니다. 이 매개 변수가 없으면 새 콘텐츠가 경고 없이 파일의 기존 콘텐츠를 대체합니다.
이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | False |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Encoding
대상 파일의 인코딩 형식을 지정합니다. 기본값은 utf8NoBOM
입니다.
이 매개 변수에 허용되는 값은 다음과 같습니다.
ascii
: ASCII(7비트) 문자 집합의 인코딩을 사용합니다.ansi
: 현재 문화권의 ANSI 코드 페이지에 대한 인코딩을 사용합니다. 이 옵션은 PowerShell 7.4에 추가되었습니다.bigendianunicode
: big-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩합니다.oem
: MS-DOS 및 콘솔 프로그램에 대한 기본 인코딩을 사용합니다.unicode
: little-endian 바이트 순서를 사용하여 UTF-16 형식으로 인코딩합니다.utf7
: UTF-7 형식으로 인코딩합니다.utf8
: UTF-8 형식으로 인코딩합니다.utf8BOM
: BOM(바이트 순서 표시)을 사용하여 UTF-8 형식으로 인코딩utf8NoBOM
: BOM(바이트 순서 표시)이 없는 UTF-8 형식으로 인코딩utf32
: UTF-32 형식으로 인코딩합니다.
PowerShell 6.2부터 인코딩 매개 변수는 등록된 코드 페이지(예: ) 또는 등록된 코드 페이지의 문자열 이름(예: -Encoding 1251
-Encoding "windows-1251"
)의 숫자 ID도 허용합니다. 자세한 내용은 Encoding.CodePage에 대한 .NET 설명서를 참조하세요.
PowerShell 7.4부터 인코딩 매개 변수 값을 사용하여 Ansi
수동으로 지정하지 않고도 현재 문화권의 ANSI 코드 페이지에 대한 숫자 ID를 전달할 수 있습니다.
이 매개 변수는 PowerShell 7.2에서 도입되었습니다.
참고 항목
UTF-7*은 더 이상 사용하지 않는 것이 좋습니다. PowerShell 7.1을 기준으로 인코딩 매개 변수를 지정 utf7
하면 경고가 기록됩니다.
형식: | Encoding |
허용되는 값: | ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | 1 |
Default value: | UTF8NoBOM |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-FilePath
이 cmdlet이 개체를 와일드카드 문자에 저장할 파일을 지정하지만 단일 파일로 확인되어야 합니다.
PowerShell 7부터 Windows 또는 /dev/tty
비 Windows 시스템에서처럼 \\.\CON
FilePath를 지정하면 InputObject가 콘솔에 인쇄됩니다. 이러한 파일 경로는 시스템의 현재 터미널 콘솔 디바이스에 해당하므로 InputObject를 인쇄하고 하나의 명령으로 출력 스트림으로 보낼 수 있습니다.
형식: | String |
별칭: | Path |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | True |
-InputObject
저장하고 표시할 개체를 지정합니다. 개체를 포함하는 변수를 입력하거나 개체를 가져오는 명령이나 식을 입력합니다. 개체를 으로 파이프할 Tee-Object
수도 있습니다.
명령 결과를 Tee-Object
파이핑하는 대신 InputObject 매개 변수와 함께 Tee-Object
사용하면 값이 컬렉션인 경우에도 InputObject 값이 단일 개체로 처리됩니다.
형식: | PSObject |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-LiteralPath
이 cmdlet이 개체를 저장할 파일을 지정합니다. FilePath와 달리 LiteralPath 매개 변수의 값은 입력된 대로 정확하게 사용됩니다. 와일드카드로 해석되는 문자는 없습니다. 경로에 이스케이프 문자가 포함된 경우 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.
형식: | String |
별칭: | PSPath, LP |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Variable
cmdlet이 개체를 저장하는 변수를 지정합니다. 이전 달러 기호($
)가 없는 변수 이름을 입력합니다.
형식: | String |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
개체를 이 cmdlet으로 파이프할 수 있습니다.
출력
이 cmdlet은 리디렉션하는 개체를 반환합니다.
참고
PowerShell에는 다음 별칭이 포함됩니다.Tee-Object
- Windows:
tee
cmdlet 또는 리디렉션 연산자를 사용할 Out-File
수도 있습니다. 둘 다 출력을 파일에 저장하지만 파이프라인 아래로 보내지는 않습니다.
PowerShell 6 Tee-Object
부터는 파일에 쓸 때 BOM이 없는 UTF-8 인코딩을 사용합니다. 다른 인코딩이 필요한 경우 인코딩 매개 변수와 함께 cmdlet을 사용합니다Out-File
.
관련 링크
PowerShell