Write-Host와 Write-Output의 PowerShell 차이점은 무엇입니까?


답변:


82

간단히 말해 Write-Host콘솔 자체에 씁니다. VBScript 의 MsgBox로 생각하십시오 . Write-Output반면에는 파이프 라인에 쓰기 때문에 다음 명령은이를 입력으로 받아 들일 수 있습니다. 암시 적으로 호출 된 Write-Output것처럼 객체를 작성하기 위해 사용할 필요는 없습니다 Write-Output.

PS> Get-Service

다음과 같습니다.

PS> Get-Service | Write-Output

16
Powershell은 이런 식으로 너무 혼란 스럽습니다. powershell에서 언급 된 pipline에 대한 느낌과 함수에서 값이 반환되는 방식을 알아 보려면이 링크를 읽어 보는 것이 좋습니다. "PowerShell의 return 키워드는 오해의 소지가 있습니다. 솔직히 말하면 대부분의 프로그래밍 언어처럼 작동하지 않기 때문에 피합니다." - powershell.org/forums/topic/...
짐 아호

1
반환 값이있는 함수를 호출하는 경우 해당 함수에서 Write-Output을 사용하지 마십시오. 그렇지 않으면 반환 값 대신 해당 문자열이 반환됩니다. 모든 종류의 혼란을 일으킬 수 있습니다.
Brain2000

28

Write-Output은 출력을 파이프 라인으로 보냅니다. 여기에서 다른 cmdlet으로 파이프되거나 변수에 할당 될 수 있습니다. Write-Host는이를 콘솔로 직접 보냅니다.

$a = 'Testing Write-OutPut'  | Write-Output
$b = 'Testing Write-Host' | Write-Host

Get-Variable a,b

출력 :

Testing Write-Host

Name                           Value                                                                 
----                           -----                                                                 
a                              Testing Write-OutPut                                                  
b                                                  

Powershell에 출력을 변수에 할당하거나 anoher 명령에 파이핑하여 파이프 라인에 대한 출력으로 수행 할 작업을 지시하지 않으면 일반적으로 콘솔 인 out-default로 전송되어 최종 결과가 동일하게 표시됩니다. .


9

Write-Output파이프 라인을 통해 데이터를 객체로 보냅니다. 질문 예제에서는 문자열 만 전달합니다.

write-host호스트에 따라 다릅니다. 콘솔 write-host에서 기본적으로 [console]::WriteLine. 자세한 정보는 이것을 참조하십시오 .


4
미래의 독자를 위해 명확히하기 위해서입니다. Write-Ouput개체를 보냅니다. 이번에는 문자열 이었지만 일반적으로 객체를 전송하고 결과 / 데이터를 출력하는 기본 방법이므로 일반적으로 사용하지 않아도됩니다. :)
Frode F.

5

Write-Host와 Write-Output의 또 다른 차이점 :

  • Write-Host는 화면에 메시지를 표시하지만 로그에는 기록하지 않습니다.

  • Write-Output은 로그에 메시지를 기록하지만 화면에는 표시하지 않습니다.

그리고 Write-Host는 유해한 것으로 간주됩니다. Write-Host Thoughmful 에서 자세한 설명을 볼 수 있습니다 .


2
쓰기-출력이 훨씬 더 해 롭습니다. 함수가 명령에서 예상치 못한 가비지 출력이 아닌 예상 결과를 실제로 반환하는지 어떻게 확인합니까?
MKesper 2011

6
Write-Output스크립트를 직접 실행하는 경우 화면에 메시지를 표시 한다고 생각 합니다. 그래서 "Write-Output이 로그에 메시지를 기록하지만 화면에 표시하지 않습니다."라는 의미가 무엇인지 잘 모르겠습니다. ?
Jim Aho

변수에 대한 출력을 캡처하는 함수 내에서 사용되는 경우 Write-Output이 화면에 정보를 반환하도록 할 수 없습니다. 출력을 망칠 수도 있습니다. Write-Host가 이에 더 적합합니다.
galmok

@Summer Write-Output은 해롭고 Write-Information은 환상적입니다. 쓰기-출력은 반환 값이있는 Powershell 함수의 적입니다.
Brain2000

문서에 따르면 "Windows PowerShell 5.0부터는 Write-Host가 Write-Information 용 래퍼입니다.이를 통해 Write-Host를 사용하여 정보 스트림에 출력을 내보낼 수 있습니다."
Phistrom 2010

0

아래 예제를 통해 두 cmd의 차이점을 이해할 수 있습니다.

쓰기 호스트 "msgtxt"| Get-Service 위에서 실행하면 "msgtxt"로 출력됩니다.

쓰기-출력 "msgtxt"| Get-Service 위를 실행하면 msgtxt가 서비스의 이름이 아니므로 오류가 발생합니다. (이상적인 조건에서) (파이프 라인에 작성 중이고 Get-Service에 입력으로 전달되고 있기 때문에)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.