Jak debugować skrypty w środowisku Windows PowerShell ISEHow to Debug Scripts in Windows PowerShell ISE

W tym artykule opisano sposób debugowania skryptów na komputerze lokalnym przy użyciu funkcji debugowania visual Windows PowerShell Integrated Scripting Environment (ISE).This article describes how to debug scripts on a local computer by using the Windows PowerShell Integrated Scripting Environment (ISE) visual debugging features.

Jak zarządzać punkty przerwaniaHow to manage breakpoints

Punkt przerwania jest wyznaczony miejscu w skrypcie miejsce chcesz operacji wstrzymania, dzięki czemu można sprawdzić bieżącego stanu zmienne i środowisko, w którym uruchomiony jest skrypt.A breakpoint is a designated spot in a script where you would like operation to pause so that you can examine the current state of the variables and the environment in which your script is running. Gdy skrypt jest wstrzymane przez punkt przerwania, możesz uruchamiać polecenia w okienku konsoli, aby sprawdzić stan skryptu.Once your script is paused by a breakpoint, you can run commands in the Console Pane to examine the state of your script. Możesz output zmienne lub innych poleceń.You can output variables or run other commands. Nawet można modyfikować wartości zmiennych, które są widoczne w kontekście obecnie uruchamianie skryptu.You can even modify the value of any variables that are visible to the context of the currently running script. Po zostały zbadane, mają być wyświetlane, możesz wznowić działanie skryptu.After you have examined what you want to see, you can resume operation of the script.

Można ustawić trzy typy punktów przerwania w środowisku debugowania programu Windows PowerShell:You can set three types of breakpoints in the Windows PowerShell debugging environment:

  1. Wiersz punktu przerwania.Line breakpoint. Skrypt wstrzymuje po osiągnięciu wyznaczonych wiersza podczas działania skryptuThe script pauses when the designated line is reached during the operation of the script

  2. Zmienna punktu przerwania.Variable breakpoint. Skrypt wstrzymuje przy każdej zmianie wyznaczonych zmienna.The script pauses whenever the designated variable's value changes.

  3. Polecenie punktu przerwania.Command breakpoint. Skrypt wstrzymuje zawsze, gdy wyznaczonych polecenia ma być uruchomiona podczas działania skryptu.The script pauses whenever the designated command is about to be run during the operation of the script. Może zawierać parametrów, aby dokładniej przefiltrować punktu przerwania działania, które mają.It can include parameters to further filter the breakpoint to only the operation you want. Polecenie można także funkcji, do której został utworzony.The command can also be a function you created.

Te w środowisku Windows PowerShell ISE debugowania za pomocą menu lub skróty klawiaturowe można ustawić tylko punkty przerwania wiersza.Of these, in the Windows PowerShell ISE debugging environment, only line breakpoints can be set by using the menu or the keyboard shortcuts. Można ustawić dwa typy punktów przerwania, ale są skonfigurowane w okienku konsoli przy użyciu PSBreakpoint zestaw polecenia cmdlet.The other two types of breakpoints can be set, but they are set from the Console Pane by using the Set-PSBreakpoint cmdlet. W tej sekcji opisano, jak można wykonać zadania debugowania w środowisku Windows PowerShell ISE przy użyciu menu, jeśli jest on dostępny i wykonywać szerszej grupy poleceń w okienku konsoli przy użyciu skryptów.This section describes how you can perform debugging tasks in Windows PowerShell ISE by using the menus where available, and perform a wider range of commands from the Console Pane by using scripting.

Aby ustawić punkt przerwaniaTo set a breakpoint

Można ustawić punktu przerwania w skrypcie dopiero po jego zapisaniu.A breakpoint can be set in a script only after it has been saved. Kliknij wiersz, w którym chcesz ustawić punkt przerwania wiersza, a następnie kliknij prawym przyciskiem myszy Przełącz punkt przerwania.Right-click the line where you want to set a line breakpoint, and then click Toggle Breakpoint. Lub kliknij wiersz, w którym chcesz ustawić punkt przerwania wiersza i naciśnij klawisz F9 lub na debugowania menu, kliknij przycisk Przełącz punkt przerwania.Or, click the line where you want to set a line breakpoint, and press F9 or, on the Debug menu, click Toggle Breakpoint.

Poniższy skrypt to przykład sposobu można ustawić punktu przerwania zmiennej w okienku konsoli przy użyciu PSBreakpoint zestaw polecenia cmdlet.The following script is an example of how you can set a variable breakpoint from the Console Pane by using the Set-PSBreakpoint cmdlet.

# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server

Wyświetl listę wszystkich punktów przerwaniaList all breakpoints

Wyświetla wszystkie punkty przerwania w bieżącej sesji programu Windows PowerShell.Displays all breakpoints in the current Windows PowerShell session.

Na debugowania menu, kliknij przycisk listy punktów przerwania.On the Debug menu, click List Breakpoints. Poniższy skrypt to przykład sposobu można wyświetlić listę wszystkich punktów przerwania w okienku konsoli przy użyciu Get-PSBreakpoint polecenia cmdlet.The following script is an example of how you can list all breakpoints from the Console Pane by using the Get-PSBreakpoint cmdlet.

# This command lists all breakpoints in the current session.
Get-PSBreakpoint

Usuwanie punktu przerwaniaRemove a breakpoint

Usuwanie punktu przerwania usunięcia go.Removing a breakpoint deletes it.

Jeśli uważasz, że możesz chcieć użyć go później, należy wziąć pod uwagę wyłączenie punktu przerwania go zamiast tego.If you think you might want to use it again later, consider Disable a Breakpoint it instead. Kliknij wiersz, w której chcesz usunąć punkt przerwania, a następnie kliknij prawym przyciskiem myszy Przełącz punkt przerwania.Right-click the line where you want to remove a breakpoint, and then click Toggle Breakpoint. Lub kliknij wiersz, w której chcesz usunąć punkt przerwania, a następnie na debugowania menu, kliknij przycisk Przełącz punkt przerwania.Or, click the line where you want to remove a breakpoint, and on the Debug menu, click Toggle Breakpoint. Poniższy skrypt jest przykładem usunąć punkt przerwania o określonym identyfikatorze w okienku konsoli za pomocą PSBreakpoint Usuń polecenia cmdlet.The following script is an example of how to remove a breakpoint with a specified ID from the Console Pane by using the Remove-PSBreakpoint cmdlet.

# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2

Usuń wszystkie punkty przerwaniaRemove All Breakpoints

Aby usunąć wszystkie punkty przerwania zdefiniowana w bieżącej sesji, na debugowania menu, kliknij przycisk Usuń wszystkie punkty przerwania.To remove all breakpoints defined in the current session, on the Debug menu, click Remove All Breakpoints.

Poniższy skrypt jest przykładem usunąć wszystkie punkty przerwania w okienku konsoli za pomocą PSBreakpoint Usuń polecenia cmdlet.The following script is an example of how to remove all breakpoints from the Console Pane by using the Remove-PSBreakpoint cmdlet.

# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint

Wyłączenie punktu przerwaniaDisable a Breakpoint

Wyłączenie punktu przerwania nie powoduje jego usunięcia; wyłącza ona go dopóki nie jest włączona.Disabling a breakpoint does not remove it; it turns it off until it is enabled. Aby wyłączyć określony wiersz punkt przerwania, kliknij prawym przyciskiem myszy wiersz, w którym chcesz wyłączyć punkt przerwania, a następnie kliknij przycisk wyłączyć punkt przerwania.To disable a specific line breakpoint, right-click the line where you want to disable a breakpoint, and then click Disable Breakpoint. Lub kliknij wiersz, w którym chcesz wyłączyć punkt przerwania, i naciśnij klawisz F9 lub na debugowania menu, kliknij przycisk wyłączyć punkt przerwania.Or, click the line where you want to disable a breakpoint, and press F9 or, on the Debug menu, click Disable Breakpoint. Poniższy skrypt to przykład jak usunąć punkt przerwania o określonym identyfikatorze w okienku konsoli przy użyciu PSBreakpoint Wyłącz polecenia cmdlet.The following script is an example of how you can remove a breakpoint with a specified ID from the Console Pane by using the Disable-PSBreakpoint cmdlet.

# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0

Wyłącz wszystkie punkty przerwaniaDisable All Breakpoints

Wyłączenie punktu przerwania nie powoduje jego usunięcia; wyłącza ona go dopóki nie jest włączona.Disabling a breakpoint does not remove it; it turns it off until it is enabled. Aby wyłączyć wszystkie punkty przerwania w bieżącej sesji, na debugowania menu, kliknij przycisk Wyłącz wszystkie punkty przerwania.To disable all breakpoints in the current session, on the Debug menu, click Disable all Breakpoints. Poniższy skrypt to przykład jak wyłączyć wszystkie punkty przerwania w okienku konsoli przy użyciu PSBreakpoint Wyłącz polecenia cmdlet.The following script is an example of how you can disable all breakpoints from the Console Pane by using the Disable-PSBreakpoint cmdlet.

# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint

Włącz punkt przerwaniaEnable a Breakpoint

Aby włączyć określonego punktu przerwania, kliknij prawym przyciskiem myszy wiersz, w której chcesz włączyć punkt przerwania, a następnie kliknij przycisk włączyć punkt przerwania.To enable a specific breakpoint, right-click the line where you want to enable a breakpoint, and then click Enable Breakpoint. Lub kliknij wiersz, w której chcesz włączyć punkt przerwania, a następnie naciśnij klawisz F9 lub na debugowania menu, kliknij przycisk włączyć punkt przerwania.Or, click the line where you want to enable a breakpoint, and then press F9 or, on the Debug menu, click Enable Breakpoint. Poniższy skrypt to przykład sposobu określonych punktów przerwania w okienku konsoli można włączyć za pomocą PSBreakpoint Włącz polecenia cmdlet.The following script is an example of how you can enable specific breakpoints from the Console Pane by using the Enable-PSBreakpoint cmdlet.

# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5

Włącz wszystkie punkty przerwaniaEnable All Breakpoints

Aby włączyć wszystkie punkty przerwania zdefiniowana w bieżącej sesji, na debugowania menu, kliknij przycisk Włącz wszystkie punkty przerwania.To enable all breakpoints defined in the current session, on the Debug menu, click Enable all Breakpoints. Poniższy skrypt to przykład sposobu wszystkie punkty przerwania w okienku konsoli można włączyć za pomocą PSBreakpoint Włącz polecenia cmdlet.The following script is an example of how you can enable all breakpoints from the Console Pane by using the Enable-PSBreakpoint cmdlet.

# This command enables all breakpoints in the current session.
# You can abbreviate the command by using their aliases: "gbp | ebp".
Get-PSBreakpoint | Enable-PSBreakpoint

Jak zarządzać sesji debugowaniaHow to manage a debugging session

Przed rozpoczęciem debugowania, należy ustawić co najmniej jednego punktu przerwania.Before you start debugging, you must set one or more breakpoints. Nie można ustawić punktu przerwania, chyba że zostanie zapisany skrypt, który chcesz debugować.You cannot set a breakpoint unless the script that you want to debug is saved. Dla kierunków na jak ustawić punkt przerwania, zobacz jak zarządzać punktów przerwania lub PSBreakpoint zestawu.For directions on of how to set a breakpoint, see How to manage breakpoints or Set-PSBreakpoint. Po rozpoczęciu debugowania, nie można edytować skryptu, aż do zatrzymania debugowania.After you start debugging, you cannot edit a script until you stop debugging. Skrypt, który zawiera jeden lub więcej punktów przerwania ustawionych są automatycznie zapisywane przed uruchomieniem.A script that has one or more breakpoints set is automatically saved before it is run.

Aby rozpocząć debugowanieTo start debugging

Naciśnij klawisz F5 lub na pasku narzędzi kliknij Uruchom skrypt ikony, lub na debugowania kliknij menu Uruchom/Kontynuuj.Press F5 or, on the toolbar, click the Run Script icon, or on the Debug menu click Run/Continue. Skrypt jest uruchamiany, aż do napotkania pierwszego punktu przerwania.The script runs until it encounters the first breakpoint. Wstrzymuje działanie istnieje, a wyróżnia wiersza, w którym wstrzymana.It pauses operation there and highlights the line on which it paused.

Aby kontynuować debugowanieTo continue debugging

Naciśnij klawisz F5 lub na pasku narzędzi kliknij Uruchom skrypt ikony, lub na debugowania menu, kliknij przycisk Uruchom/Kontynuuj lub wpisz w okienku konsoli C , a następnie naciśnij klawisz ENTER.Press F5 or, on the toolbar, click the Run Script icon, or on the Debug menu, click Run/Continue or, in the Console Pane, type C and then press ENTER. Powoduje to, że skrypt do kontynuowania pracy do następnego punktu przerwania lub na końcu skryptu, jeśli nie zostaną napotkane nie dodatkowe punkty przerwania.This causes the script to continue running to the next breakpoint or to the end of the script if no further breakpoints are encountered.

Aby wyświetlić stosu wywołańTo view the call stack

Stos wywołań Wyświetla bieżący przebieg lokalizacji w skrypcie.The call stack displays the current run location in the script. Jeśli skrypt jest uruchamiany w funkcji, która została wywołana przez inną funkcję, następnie reprezentowaną wyświetlania przez dodatkowe wiersze w danych wyjściowych.If the script is running in a function that was called by a different function, then that is represented in the display by additional rows in the output. Wiersz najniższy Wyświetla oryginalny skrypt i wiersza w nim, w którym została wywołana funkcja.The bottom-most row displays the original script and the line in it in which a function was called. Dalej wiersz wskazuje tej funkcji i wiersza w nim, w którym innej funkcji może zostać wywołany.The next line up shows that function and the line in it in which another function might have been called. Wiersz najwyżej pokazuje bieżący kontekst bieżącego wiersza, w którym ustawiono punktu przerwania.The top-most row shows the current context of the current line on which the breakpoint is set.

Podczas wstrzymania, aby wyświetlić bieżący stos wywołań, naciśnij klawisz CTRL + SHIFT + D lub na debugowania menu, kliknij przycisk stos wywołań wyświetlania lub, w okienku konsoli wpisz K , a następnie naciśnij klawisz ENTER.While paused, to see the current call stack, press CTRL+SHIFT+D or, on the Debug menu, click Display Call Stack or, in the Console Pane, type K and then press ENTER.

Aby zatrzymać debugowanieTo stop debugging

Naciśnij klawisz SHIFT-F5 lub na debugowania menu, kliknij przycisk zatrzymać debuger, lub wpisz w okienku konsoli Q , a następnie naciśnij klawisz Wprowadź.Press SHIFT-F5 or, on the Debug menu, click Stop Debugger, or, in the Console Pane, type Q and then press ENTER.

Przekrocz nad, Wkrocz i wyjdź podczas debugowaniaHow to step over, step into, and step out while debugging

Wykonywanie krok po kroku jest procesem działających w czasie jednej instrukcji.Stepping is the process of running one statement at a time. Można zatrzymać na wiersz kodu i sprawdzić wartości zmiennych i stanu systemu.You can stop on a line of code, and examine the values of variables and the state of the system. W poniższej tabeli opisano typowe debugowania zadań, takich jak pominięcie Wkraczanie do i wykonywanie krok po kroku,.The following table describes common debugging tasks such as stepping over, stepping into, and stepping out.

Zadanie debugowaniaDebugging Task OpisDescription Jak wykonać je w środowisku PowerShell ISEHow to accomplish it in PowerShell ISE
WkroczStep Into Wykonuje bieżącej instrukcji, a następnie zatrzymuje w następnej instrukcji.Executes the current statement and then stops at the next statement. W przypadku bieżącej instrukcji funkcji lub wywołań skryptów, a następnie kroków debugera w tej funkcji lub skrypt, w przeciwnym razie zatrzymuje się w następnej instrukcji.If the current statement is a function or script call, then the debugger steps into that function or script, otherwise it stops at the next statement. Naciśnij klawisz F11 lub na debugowania menu, kliknij przycisk Step Into, lub wpisz w okienku konsoli S i naciśnij klawisz ENTER.Press F11 or, on the Debug menu, click Step Into, or in the Console Pane, type S and press ENTER.
PrzekroczStep Over Wykonuje bieżącej instrukcji, a następnie zatrzymuje w następnej instrukcji.Executes the current statement and then stops at the next statement. W przypadku bieżącej instrukcji funkcji lub wywołań skryptów, a następnie debuger wykonuje całej funkcji lub skrypcie, i zatrzymuje się w następnej instrukcji po wywołaniu funkcji.If the current statement is a function or script call, then the debugger executes the whole function or script, and it stops at the next statement after the function call. Naciśnij klawisz F10 lub na debugowania menu, kliknij przycisk Step Over, lub wpisz w okienku konsoli V i naciśnij klawisz ENTER.Press F10 or, on the Debug menu, click Step Over, or in the Console Pane, type V and press ENTER.
WyjdźStep Out Kroki poza bieżącą funkcję i uogólnianie po jednym poziomie, jeśli funkcja jest zagnieżdżony.Steps out of the current function and up one level if the function is nested. Jeśli w głównym, skrypt zostanie wykonany na końcu lub do następnego punktu przerwania.If in the main body, the script is executed to the end, or to the next breakpoint. Pominięto instrukcje są wykonywane, ale nie przeprowadził przez.The skipped statements are executed, but not stepped through. Naciśnij klawisz SHIFT + F11, lub na debugowania menu, kliknij przycisk Wyjdź, lub wpisz w okienku konsoli O i naciśnij klawisz ENTER.Press SHIFT+F11, or on the Debug menu, click Step Out, or in the Console Pane, type O and press ENTER.
KontynuujContinue Kontynuuje wykonywanie na końcu lub do następnego punktu przerwania.Continues execution to the end, or to the next breakpoint. Pominięto funkcje i wywołania są wykonywane, ale nie przeprowadził przez.The skipped functions and invocations are executed, but not stepped through. Naciśnij klawisz F5 lub na debugowania menu, kliknij przycisk Uruchom/Kontynuuj, lub wpisz w okienku konsoli C i naciśnij klawisz ENTER.Press F5 or, on the Debug menu, click Run/Continue, or in the Console Pane, type C and press ENTER.

Wyświetlanie wartości zmiennych podczas debugowaniaHow to display the values of variables while debugging

Podczas wykonywania kroków za pomocą kodu można wyświetlić bieżące wartości zmiennych w skrypcie.You can display the current values of variables in the script as you step through the code.

Aby wyświetlić wartości zmiennych standardoweTo display the values of standard variables

Użyj jednej z następujących metod:Use one of the following methods:

  • W okienku skryptów umieść kursor nad zmienną do wyświetlania wartości jako etykietka narzędzia.In the Script Pane, hover over the variable to display its value as a tool tip.

  • W okienku konsoli, wpisz nazwę zmiennej i naciśnij klawisz ENTER.In the Console Pane, type the variable name and press ENTER.

Wszystkie okienka w ISE zawsze znajdują się w tym samym zakresie.All panes in ISE are always in the same scope. W związku z tym podczas debugowania skryptu, z poleceniami, które można wpisać w okienku konsoli Uruchom skrypt zakresu.Therefore, while you are debugging a script, the commands that you type in the Console Pane run in script scope. Dzięki temu można używać w okienku konsoli można znaleźć wartości zmiennych i wywołanie funkcji, które są definiowane tylko w skrypcie.This allows you to use the Console Pane to find the values of variables and call functions that are defined only in the script.

Aby wyświetlić wartości zmiennych automatycznychTo display the values of automatic variables

Powyższa metoda służy do wyświetlania wartości zmiennych prawie wszystkie podczas debugowania skryptu.You can use the preceding method to display the value of almost all variables while you are debugging a script. Jednak te metody nie działają następujące zmienne automatyczne.However, these methods do not work for the following automatic variables.

  • $$

  • $Input$Input

  • $MyInvocation$MyInvocation

  • $PSBoundParameters$PSBoundParameters

  • $Args$Args

Próba wyświetlenia wartości tych zmiennych można uzyskać wartość tej zmiennej w potoku wewnętrzny debuger używa, nie wartość zmiennej w skrypcie.If you try to display the value of any of these variables, you get the value of that variable for in an internal pipeline the debugger uses, not the value of the variable in the script. Można obejść, to w przypadku kilku zmiennych ($, $Input $MyInvocation, $PSBoundParameters i $Args) przy użyciu następujących metod:You can work around this for a few variables ($, $Input, $MyInvocation, $PSBoundParameters, and $Args) by using the following method:

  1. W skrypcie należy przypisać wartość zmiennej automatycznego do nowej zmiennej.In the script, assign the value of the automatic variable to a new variable.

  2. Wyświetl wartość z nową zmienną, ustawiając kursor nad nowej zmiennej w okienku skryptów lub wpisując nowej zmiennej w okienku konsoli.Display the value of the new variable, either by hovering over the new variable in the Script Pane, or by typing the new variable in the Console Pane.

Na przykład aby wyświetlić wartość zmiennej $MyInvocation w skrypcie, przypisuje wartość do nowej zmiennej, takich jak $scriptname i następnie umieść kursor nad lub typu zmienną $scriptname do wyświetlania wartości.For example, to display the value of the $MyInvocation variable, in the script, assign the value to a new variable, such as $scriptname, and then hover over or type the $scriptname variable to display its value.

# In C:\ps-test\MyScript.ps1
$scriptname = $MyInvocation.MyCommand.Path
# In the Console Pane:
PS> .\MyScript.ps1
PS> $scriptname
C:\ps-test\MyScript.ps1

Zobacz teżSee Also