2012-10-31 11 views
14

Mam poniższy kod, który przechodzi i pobiera informacje o zaplanowanych zadaniach i umieszcza dane wyjściowe pojawiające się na ekranie w pliku dziennika.Start-Transcript nie przechwytuje wszystkich danych wyjściowych do pliku dziennika ..?

Zauważyłem jednak, że wszystkie błędy są rejestrowane, Z WYJĄTKIEM dla serwerów, które mają "Odmowa dostępu" - w jaki sposób mogę również zarejestrować te błędy w pliku dziennika.

Poniżej znajduje się kod:

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 

Oto wynik na ekranie:

> 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. 

Oto wynik w pliku dziennika .... no Odmowa dostępu Pokazany .. .?

> 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 

Odpowiedz

13

Takie zachowanie z natywną wyjście polecenia nie są rejestrowane w wyjściu Start-Transkrypcja ale jest wysyłany do konsoli jest opisana w connect bug 315857. Zobacz obejścia dla możliwych rozwiązań.

+0

aaahhhh ......... interesujące .... dzięki za to ...! – lara400

+7

A teraz link jest zepsuty, a wraz z nim wszystkie obejścia :-( – kroimon

+2

[Resurrected link] (http://web.archive.org/web/20130608164153/http://connect.microsoft.com/PowerShell/feedback/ szczegóły/315875/nie można przechwycić-wszystkie-sesje-wyjściowe-do-transkrypcji) –

10

Najprostszym rozwiązaniem jest rurą wyniki polecenia ojczysty do Out-Host

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

A teraz, potok jest rozerwany, a ty nie możesz wyprowadzać swoich wyników na nic innego. Jest to najbardziej oczywista wada tego –

+0

Podejrzewam, że (schtasks.exe/query/S $ name/fo CSV/v> $ regularpathpath \ $ name.csv | Out-Host) spowoduje anulowanie potoku, ale nie będzie obsługiwać błędów teraz. –

1

Ahh, prawidłowa odpowiedź powinna być:

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

Tzn. pipe stderror (pipe 2) na stdout (pipe 1), dzięki czemu oba programy są wyświetlane na wyjściu standardowym.

0

Żadne z powyższych nie działało dla mnie. Znalazłem a link from 2009 z dyskusjami na temat problemu. Ale program Microsoftu blog from 2010 rozwiązał problem.

W skrócie, potnij macierzyste polecenie wyjściowe na domyślne wyjście.

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

{tak naprawdę nie spróbować tej linii siebie, ale masz pomysł.}

0

tag serwis Get

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

użyłem Write-wyjścia w jednej linii na górze z mojego skryptu, po tym wszystkim wszystkie były Write-Hostem. Ale każdy zapis "Zapis" jest teraz wyświetlany w moim skrypcie.

Powiązane problemy