PowerShell에서 콘솔에 쓰는 가장 좋은 방법


142

콘솔에 인쇄 (에코)하는 다양한 방법에 대해 약간의 혼란이 있습니다. 콘솔에 출력을 쓰는 여러 가지 방법이 있습니다.

Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"

세 가지 방법 모두 콘솔에 인쇄됩니다. 중간 부분은 다소 단순하고 덜 장황하며 사용하기 쉽습니다. 또한 다음과 같은 함수를 작성할 때 다음을 발견합니다.

function GetValues()
{
    "1"
    "2"
}

파이프 라인에서 여전히 두 개의 문자열을 반환합니다.

그리고 나는 여전히 값을 인쇄 할 수 있습니다 :

foreach ($s in GetValues)
{
    Write-Host "s: " $s
}

내가 찾은 것은 인용 된 문자열 만 사용하는 것이 항상 사용자 정의 호스트에 나타나는 것은 아니며 사용자 정의 호스트 에 인쇄 할 값을 얻으려면 Write-Host 를 사용해야한다는 것 입니다.

어떻게 든 혼란스러워합니다. 되어 "Print something"별칭 있어야 Write-Host또는 무엇을 의도?

답변:


101

PowerShell의 기본 동작은 다른 파이프 라인 요소에 의해 선택되거나 변수에 지정되거나 경로 재 지정되지 않고 파이프 라인에서 떨어지는 모든 항목을 덤프하는 것입니다 Out-Host. Out-Host분명히 호스트에 의존하는 것은 무엇입니까?

파이프 라인에서 물건을 빠뜨리는 것만으로 호스트 응용 프로그램에서 텍스트를 출력하는 유일한 이유가 존재 하는 대체물 이 아닙니다Write-Host .

출력을 원하면 Write-*cmdlet 을 사용하십시오 . 함수에서 값을 반환하려면 cmdlet없이 개체를 덤프하면됩니다.


1
.vbs 스크립트에 입력했습니다. 그 코드 줄과 나에게 오류가 발생합니다.
FrenkyB

58

중간은 파이프 라인에 씁니다. Write-HostOut-Host콘솔에 기록합니다. 'echo'는 Write-Output파이프 라인에도 쓰는 별칭입니다 . 콘솔에 쓰는 가장 좋은 방법은 Write-Hostcmdlet을 사용하는 것 입니다.

파이프 라인에 객체를 쓰면 체인의 다른 명령으로 소비 될 수 있습니다. 예를 들면 다음과 같습니다.

"hello world" | Do-Something

그러나 Write-Host파이프 라인이 아닌 콘솔에 쓰기 때문에 작동 하지 않습니다 (Do-Something은 문자열을 얻지 못합니다).

Write-Host "hello world" | Do-Something

3
이 답변은 기술적으로는 맞지만 신 피오 트 PowerShell 사용자를 잃어버린 것 같습니다. 효과적인 PowerShell의 첫 번째 규칙은 파이프 라인에 유용한 출력을 생성하는 것입니다. Write-Host를 많이 사용하는 경우 잘못하고있을 수 있습니다.
OldFart

6
음, OP가 요구 한 것이 아닌가, 콘솔에 쓰는 방법은 무엇입니까? 호스트에 쓰는 것과 파이프 라인에 쓰는 것에는 차이가 있으며, 각자가하는 일을 알아야합니다. 명확하게 답변을 업데이트하겠습니다.
Shay Levy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.