2014-01-22 2 views
0

로그 파일에 정보를 쓰는 데 도움이되는지 알고 싶었습니다. 아래 예제에서는 echo를 사용하고 있지만 쓰기 호스트도 시도했습니다. 일부 텍스트와 쉼표 및 내 환경 변수가있는 CSV 파일을 가져 오려고합니다. 그것은 쓰기 호스트와 함께 화면에서 잘 작동하는 것 같지만, 로그에 덤프 할 때 $ 변수는 따옴표로 묶인 텍스트와 같은 줄에 머물지 않고 항상 아래 줄에있는 것처럼 보입니다.로그 파일을 만드는 데 문제가 있음

$Dude = "UserName" 

Try 
{ 
    Set-Mailbox $Dude -AntispamBypassEnabled $true -ErrorAction Stop -WarningVariable Warn 
} 
Catch 
{ 
    echo "Change Failed" $Dude >> c:\scripts\text.log 
    Exit 2 
} 

if ($Warn) 
{ 
    echo "Change Succeeded, but no changes were made." $Dude >> c:\cripts\text.log 
    Exit 1 
} 
else 
{ 
    echo "Your change was successful." $Dude >> c:\scripts\text.log 
    Exit 0 
} 

답변

1

변수를 큰 따옴표 안에 넣으십시오. 이처럼 :

echo "Hello $dude" >> file.txt 
1

echo는 단순히 Write-Output 명령의 별칭입니다. 두 개의 다른 객체를 파일에 쓰고 있기 때문에보고있는 동작이 발생하고 있습니다. 첫 번째 항목은 String이고 두 번째 항목은 $Dude 변수입니다 (부수적으로 문자열을 가리킴).

  • Set-Content
  • Out-File
  • : 미래의 혼란을 방지하기 위해

    , 내가 먼저 전체 로그 메시지를 작성하고 다음 옵션 중 하나를 사용하여 출력 파일에 쓰기 추천 여기

  • [System.IO.File]::AppendAllText()

은 예입니다 :

$LogMessage = '{0}: Operation completed successfully, but no changes were made for user: {1}' -f (Get-Date -Format 'yyyy-MM-dd hh:mm:ss'), $Dude; 
Set-Content -Path $PSScriptRoot\Mailboxes.log -Value $LogMessage; 

는 참고 : Write-Host는 파이프 라인에 출력하지 정보를 않습니다, 단순히 콘솔에 텍스트를 기록합니다. 왼쪽에 Write-Host이라는 >> 리디렉션 연산자를 사용하면 기본적으로 대상 파일에 "아무것도 출력하지 않습니다.

ps. 또한 "변경 성공"보다 명확한 로그 메시지가 나오길 권장하지만 변경 사항은 없습니다. " 프로그램이하는 일을 이해하지 못하는 사람에게는 다소 혼란 스러울 것입니다.

관련 문제