如何从PowerShell读取PowerShell的调试流?

时间:2010-06-22 11:03:52

标签: powershell debugging stream

我使用PowerShell 2.0通过Write-Debug函数将数据写入PowerShell的调试流。现在我想从同一个PowerShell脚本中读取该流。我尝试使用“2>& 1”重定向调试流,但这仅适用于错误流。

有没有办法从PowerShell脚本中读取PowerShell调试流?

2 个答案:

答案 0 :(得分:2)

可以做但但很复杂。请参阅Oisin在script logging上的文章。一般来说,能够重定向除stdout和stderr之外的流的问题是logged as a suggestion on the connect site。你可能想投票。

答案 1 :(得分: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")