2012-10-31 8 views
14

Ich habe den folgenden Code, der durchläuft und Informationen über geplante Tasks abruft und die Ausgabe, die auf dem Bildschirm erscheint, in eine Protokolldatei schreibt.Start-Transcript erfasst nicht alle Ausgaben in der Protokolldatei ..?

Ich habe jedoch festgestellt, dass alle Fehler protokolliert werden, außer für Server mit "Zugriff verweigert" - wie kann ich diese Fehler auch in der Protokolldatei protokollieren.

Unten ist der Code:

Start-Transcript -path $scheduledpath\logging.txt -append 

foreach ($name in $names) 
{ 
    Write-Host "Running Against Server $name" -ForegroundColor Magenta 
    if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue) 
     { 
      #$Command = "schtasks.exe /query /S $name /fo CSV /v >c:\tools\Scheduled\$name.csv" 
      $Command = "schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv" 
      Invoke-Expression $Command 
      Clear-Variable Command -ErrorAction SilentlyContinue 
     } 

    else{ 
      Write-Host "$name is Down" -ForegroundColor Red 
     } 

} 

Stop-Transcript 

Hier ist die Ausgabe auf dem Bildschirm ist:

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> ERROR: Access is denied. 
> Running Against Server SV073633 
> ERROR: Access is denied. 

Hier ist die Ausgabe in der LOG-Datei .... keine ACCESS Gezeigte verweigert .. .?

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> Running Against Server SV073633 

Antwort

13

Dieses Verhalten mit nativen Befehlsausgabe nicht in Start-Transcript Ausgabe aufgezeichnet werden aber ausgegeben 315857 an die Konsole wird in connect Bug gemeldet. Siehe Problemumgehungen für mögliche Lösungen.

+0

aaahhhh ......... interessant .... danke dafür ...! – lara400

+7

Und jetzt ist der Link kaputt und damit die Problemumgehungen :-( – kroimon

+2

[Resurrected link] (http://www.archive.org/web/20130608164153/http://connect.microsoft.com/PowerShell/feedback/ Details/315875/capture-all-session-output-in-a-transcript) –

10

Die einfachste Abhilfe zu Rohr ist die Ergebnisse des nativen Befehls Out-Host

schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host 
+1

Und jetzt ist die Pipeline geplatzt, und Sie können Ihre Ausgabe nicht an irgend etwas weiterleiten. Das ist der offensichtlichste Nachteil davon Umgehung –

+0

Ich vermute, dass (schtasks.exe/Abfrage/S $ name/fo CSV/v> $ geplanterPfad \ $ name.csv | Out-Host) die Pipeline auflöst, obwohl Fehler jetzt nicht behandeln. –

1

Ahh, sollte die richtige Antwort sein:

$ Command = „schtasks.exe/query/S $ name/fo CSV/v 2> & 1> $ zeitgesteuerterPfad \ $ name.csv "

Ie pipe stderror (pipe 2) zu stdout (pipe 1), so dass beide im stdout angezeigt werden.

0

Keiner der oben genannten funktionierte für mich. Ich fand a link from 2009 mit Diskussionen über das Problem. Aber ein Microsoft blog from 2010 löste das Problem für mich.

Kurz gesagt, leiten Sie die native Befehlsausgabe an Out-Default.

schtasks.exe /query /S $name /fo CSV /v | Out-Default 

{Ich versuche nicht wirklich diese Linie selbst, aber Sie bekommen die Idee.}

0

Get Service-Tag

$servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber 
    Write-output $servicetag 

I verwendet Write-Ausgabe in einer Zeile an der Spitze von meinem Skript, danach waren sie alle Write-Host. Aber jede "Write" -Ausgabe wird jetzt in meinem Skript angezeigt.