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

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

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또는 무엇을 의도?



답변

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

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

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


답변

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

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

"hello world" | Do-Something

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

Write-Host "hello world" | Do-Something


답변