从作业中捕获详细流

时间:2014-09-24 21:38:20

标签: powershell

我正在尝试成为一名优秀的powerscript用户并按照最佳做法使用Write-Verbose,但我无法从正在运行的Job中获取Verbose流。

$Job = Start-Job -Name "Scanning Work Item" -ScriptBlock{
    Write-Verbose "Write-Verbose" 
    Write-Host "Write-Host"
} 

while ($Job.HasMoreData -or $Job.State -eq "Running") {     
    Receive-Job -Job $Job -Verbose 
    Start-Sleep -Seconds 1
}

此输出为

Write-Host

请仅使用经过测试的代码回答,因为我花了数小时尝试各种Powershell脚本的排列。

1 个答案:

答案 0 :(得分:2)

首先,由于您尚未更改会话的默认VerbosePreference,因此您无法获得任何详细的输出。

对于在作业运行时读取详细输出,您可以单独从相关子作业中读取每个输出流缓冲区,而无需执行接收作业,并且在执行接收作业时不会影响以后的输出,

$Job = Start-Job -Name "Scanning Work Item" -ScriptBlock{
    $VerbosePreference = 'Continue'
    Write-Verbose "Write-Verbose" 
    Write-Host "Write-Host"
    Start-Sleep -Seconds 10
} 

Start-sleep -Seconds 2

$Verbose = $Job.ChildJobs[0].verbose.readall()

$verbose

while ($Job.HasMoreData -or $Job.State -eq "Running") {     
    Receive-Job -Job $Job 
    Start-Sleep -Seconds 1
}


Write-Verbose
VERBOSE: Write-Verbose
Write-Host