2012-03-01 19 views
7

Jestem całkiem nowy w Powershell i napisałem całkiem spore skrypty, czyli skrypt, który wywołuje inne skrypty, które mają funkcje zagnieżdżone w innych funkcjach. Kiedy uruchamiam ten skrypt, czasami pojawiają się błędy, z których nie wiem skąd pochodzą. Czy istnieje prosty sposób sprawdzenia, gdzie zakończył się ten skrypt, aby rozwiązać problem z błędem?Jak śledzić przepływ skryptów

Odpowiedz

12

Można użyć Set-PsDebug uzyskać PowerShell do wyprowadzania prawie każda linia biegnie:

Set-PSDebug -Trace 1; 

Jedynym minusem jest to prawdopodobnie będziesz skończyć z dużą ilością mocy, aby przebrnąć przez ...

+0

To jest dokładnie to, czego szukałem. Jednak widzę dużą zaletę w ustalaniu, jak poprawnie debugować, więc zajrzę do tego w późniejszym czasie. –

0

Zazwyczaj błąd zawiera skrypt wywołujący.

W przypadku niepowodzenia można spróbować uruchomić skrypt programu ISE programu Window PowerShell w trybie debugowania. Pozwala to na używanie punktów przerwania i przechodzenie przez kod.

Artile na temat korzystania z ISE do debugowania:

ISE debugging

pozdrowienia Arcass

4

Do debugowania, aby zobaczyć, gdzie błąd użytkownika pochodzą Proponuję debugowanie z ISE lub PowerGUI.

Możesz także pobrać skrypt z twojego skryptu, używając cmdletu Start-Transcript, który zapisze całą aktywność konsoli do pliku. Możesz więc umieścić instrukcje, takie jak Write-Host "Doing XYZ", a te pojawią się w dzienniku transkryptów.

Jeśli złapiesz wyjątki z połowu try lub użyć pułapki można napisać numer wiersza i kolumny z wyjątkiem tak:

$ErrorActionPreference = 'Stop' 

trap { 
    Write-Host "Error on line $($_.InvocationInfo.ScriptLineNumber)" 
    exit 1 
} 

try { 
    Get-Item DoesntExist 
} catch { 
    Write-Host ("Error occurred on line: " + $_.InvocationInfo.ScriptLineNumber) 
} 

$_.InvocationInfo ma inne szczegóły dotyczące były błąd pochodzi.

Ustawiając $ErrorActionPreference = "Stop", upewniasz się, że jakikolwiek błąd wyzwala blok trap{}, który w tym przypadku wypisze linię, do której skrypt dotarł i z niej wychodzi.

+0

Dodane więcej informacji na temat 'trap {}' obsługi błędów, ponieważ umożliwia to ogólne rozwiązywanie problemów z dowolnym błędem, bez konieczności umieszczania 'try {} catch {}' wokół zbyt wielu instrukcji. –