2014-08-29 2 views
0

나는이추가 내용, 이상한 형식

$logfile = "C:\test.log" 
Add-Content -Path $logFile -Value "Add-Content Message" 
$result= CallMyFunction -Verbose 4>> $logFile 

function CallMyFunction() 
{ 
    [OutputType([string[]])] 
    [CmdletBinding()] 
    param(
) 
    Write-Verbose "Verbose Message 1" 
    Write-Verbose "Verbose Message 2" 
    Write-Output "Return Value" 
} 

같은 간단한 스크립트가 :

하는 추가-내용의 메시지를
메시지 설명 1 기본 메시지 2

로그의 두 번째 줄은 각 문자 사이에 공백이있는 방식으로 표시되는 이유는 무엇입니까? 흥미롭게도 리디렉션이나 Add-Content를 사용하여 결과를 로그 파일에 추가하는 경우 적절하게 형식이 지정됩니다. 두 가지를 함께 사용할 때 내가 놓친 차이점은 무엇입니까?

답변

1

흠, 어떤 방향으로 전달 되든 >> 리디렉션 연산자가 사용 된 것 같습니다. 나는으로 시험했다

'test' >> $logfile 

그리고 같은 행동을했다. 파일에 문자열을 넘겨주는 것이 아니라 출력 스트림을 리디렉션하기 때문이라고 생각합니다.

먼저 기본 표준 출력 스트림에 자세한 출력을 보낸 다음 Add-Content를 사용하여 파일에 쓰고 더 예상되는 방식으로 형식을 지정합니다.

$result= CallMyFunction -Verbose 4>&1 | Add-Content -Path $logfile 
0

이 문제는 출력 파일에 쓰는 데 사용 된 인코딩의 차이로 인해 발생합니다. Add-Content은 기본 인코딩으로 ASCII를 사용하지만 리디렉션 연산자는 유니 코드를 사용합니다 (Out-File의 기본값이기 때문에). 이 문제를 해결하기

, Add-Content의 인코딩을 지정

Add-Content -Path $logFile -Value "Add-Content Message" -Encoding Unicode