Używam NET w PowerShell, który wykorzystuje Trace.TraceWarning
, Trace.TraceInformation
itpJak przechwycić dane wyjściowe śledzenia .NET z zadania Powershell?
Chcę wyjścia te ślady do konsoli, gdy uruchomię mój skrypt PowerShell.
Działa to, gdy używam komponentu w bieżącej sesji. Na przykład (symulacja efektu śladowe) daje mi moc „cześć” do konsoli:
$listener = new-object "system.diagnostics.consoletracelistener"
[System.Diagnostics.Trace]::Listeners.Add($listener) | Out-Null
[System.Diagnostics.Trace]::TraceInformation("Hello")
Ale jeśli zrobić to samo w pracy PowerShell dostaję żadnego wyjścia, choć ConsoleTraceListener należy pisać na standardowe wyjście, które z kolei spodziewałem się, że dostanę się do pracy. (Co ciekawe, Console.WriteLine
nie działa również z zadaniem - ale robi to Write-Host
).
zaczynam moją pracę tak:
$work = {
$listener = new-object "system.diagnostics.consoletracelistener"
[System.Diagnostics.Trace]::Listeners.Add($listener) | Out-Null
[System.Diagnostics.Trace]::TraceInformation("Hello")
}
$job = Start-Job -RunAs32 -ScriptBlock $work
$job | Receive-Job -Wait
ConsoleTraceListener pisze do konsoli, więc pokrewne: http://serverfault.com/questions/399854/powershell-start-job-output – Caramiriel
ConsoleTraceListener wydaje się napisać do stdout http : //referencesource.microsoft.com/#System/compmod/system/diagnostics/ConsoleTraceListener.cs,b38622e30a1b1559. Ale z jakiegoś powodu przy pracy nie jest on odbierany. – Schneider
Po kilku testach znalazłem kilka ciekawych rzeczy na temat pracy i zadań dla dzieci. Myślę, że ostatecznie problem polega na tym, że powershell nie używa klasy System.Console, ale niestandardową klasę System.Management.Automation.Host.PSHost i przekierowuje strumienie. Wydaje się, że nie jest to zgodne z oczekiwaniami w niektórych przypadkach skrajnych, takich jak Twój. – StephenP