2010-06-22 2 views
1

PowerShell 2.0을 사용하여 Write-Debug 함수를 통해 PowerShell의 디버그 스트림에 데이터를 쓰고 있습니다. 이제 같은 PowerShell 스크립트에서 해당 스트림을 읽고 싶습니다. "2> & 1"을 사용하여 디버그 스트림을 리디렉션하려고했지만 오류 스트림에 대해서만 작동합니다.PowerShell에서 PowerShell의 디버그 스트림을 읽는 방법?

PowerShell 스크립트에서 PowerShell 디버그 스트림을 읽을 수있는 방법이 있습니까?

답변

2

cmdlet Write-Debug 대신 호출 할 함수를 시험해 볼 수도 있습니다. 다음은 매우 빠른 구현입니다.

$global:__DebugInfo = new-object PSObject -prop @{ 
    Enabled=$false 
    Messages=new-object System.Collections.ArrayList 
} 

function Write-Debug { 
    param([Parameter(Mandatory=$true)][string]$Message) 
    $d = Get-Command Write-Debug -CommandType cmdlet; & $d $Message; 
    if ($global:__DebugInfo.Enabled) { 
     $global:__DebugInfo.Messages.Add($Message) > $null 
    } 
} 

function Enable-Debug { 
    $global:DebugPreference = 'continue' 
    $global:__DebugInfo.Enabled = $true 
} 

function Disable-Debug { 
    $global:DebugPreference = 'silentlycontinue' 
    $global:__DebugInfo.Enabled = $false 
} 

# Test 
Enable-Debug 
Write-Debug 'this is test debug message' 
Write-Debug 'switch off' 
Disable-Debug 
Write-Debug 'this message should not be included' 

Write-Host "Debug messages:" 
Write-Host ($__DebugInfo.Messages -join "`n") 
+0

감사합니다! 그것은 내 문제에 대해 아주 잘 작동합니다. –

2

그것은 할 수 있지만 복잡합니다. Oisin의 글을 script logging에 게시하십시오. 일반적으로 stdout 및 stderr 이외의 스트림을 리디렉션 할 수있는이 문제는 logged as a suggestion on the connect site입니다. 그것에 투표하고 싶을 수도 있습니다.

관련 문제