2010-06-22 4 views
1

Я использую PowerShell 2.0 для записи данных в поток отладки PowerShell через функцию Write-Debug. Теперь я хочу прочитать этот поток из того же сценария PowerShell. Я попытался перенаправить поток отладки с помощью «2> & 1», но это работает только для потока ошибок.Как читать отладочный поток PowerShell от PowerShell?

Есть ли способ прочитать поток отладки PowerShell из сценария PowerShell?

ответ

2

Вы также можете поэкспериментировать с вашей функцией, которая будет вызываться вместо командлета 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. Возможно, вам захочется проголосовать.

Смежные вопросы