Share via


Tee-Object

명령 출력을 파일 또는 변수에 저장하고 파이프라인 아래로 보냅니다.

Syntax

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 ProcessNameHandles 속성을 선택합니다. 변수에는 $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에서 도입되었습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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 하면 경고가 기록됩니다.

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

이 cmdlet이 개체를 Wild에 저장하는 파일을 지정합니다카드 문자는 허용되지만 단일 파일로 확인되어야 합니다.

PowerShell 7부터 Windows 또는 /dev/tty 비 Windows 시스템에서처럼 \\.\CON FilePath를 지정하면 InputObject가 콘솔에 인쇄됩니다. 이러한 파일 경로는 시스템의 현재 터미널 콘솔 디바이스에 해당하므로 InputObject를 인쇄하고 하나의 명령으로 출력 스트림으로 보낼 수 있습니다.

Type:String
Aliases:Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

저장하고 표시할 개체를 지정합니다. 개체를 포함하는 변수를 입력하거나 개체를 가져오는 명령이나 식을 입력합니다. 개체를 으로 파이프할 Tee-Object수도 있습니다.

명령 결과를 Tee-Object파이핑하는 대신 InputObject 매개 변수와 함께 Tee-Object사용하면 값이 컬렉션인 경우에도 InputObject 값이 단일 개체로 처리됩니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

이 cmdlet이 개체를 저장할 파일을 지정합니다. FilePath와 달리 LiteralPath 매개 변수의 값은 입력된 대로 정확하게 사용됩니다. 어떤 문자도 야생으로 해석되지 카드. 경로에 이스케이프 문자가 포함된 경우 작은따옴표로 묶습니다. 작은따옴표는 PowerShell에 문자를 이스케이프 시퀀스로 해석하지 않도록 지시합니다.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Variable

cmdlet이 개체를 저장하는 변수를 지정합니다. 이전 달러 기호($)가 없는 변수 이름을 입력합니다.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

입력

PSObject

개체를 이 cmdlet으로 파이프할 수 있습니다.

출력

PSObject

이 cmdlet은 리디렉션하는 개체를 반환합니다.

참고

PowerShell에는 다음 별칭이 포함됩니다.Tee-Object

  • Windows:
    • tee

cmdlet 또는 리디렉션 연산자를 사용할 Out-File 수도 있습니다. 둘 다 출력을 파일에 저장하지만 파이프라인 아래로 보내지는 않습니다.

PowerShell 6 Tee-Object 부터는 파일에 쓸 때 BOM이 없는 UTF-8 인코딩을 사용합니다. 다른 인코딩이 필요한 경우 인코딩 매개 변수와 함께 cmdlet을 사용합니다Out-File.