Windows PowerShell ISE'de Komut Dosyalarında Hata Ayıklama


Bu makalede, Windows PowerShell Tümleşik Komut Dosyası Ortamı (ISE) görsel hata ayıklama özelliklerini kullanarak yerel bir bilgisayardaki komut dosyalarında nasıl hata ayıklanacağı açıklanmaktadır.

Kesme noktaları nasıl yönetilir?

Kesme noktası, komut dosyasında, değişkenlerin geçerli durumunu ve komut dosyanızın çalıştığı ortamı inceleyebilmeniz için işlemin duraklatılmasını istediğiniz belirlenmiş bir noktadır. Komut dosyanız bir kesme noktası tarafından duraklatıldığında, komut dosyanızın durumunu incelemek için Konsol Bölmesinde komutları çalıştırabilirsiniz. Değişkenlerin çıktısını alabilir veya diğer komutları çalıştırabilirsiniz. Şu anda çalışan betiğin bağlamı tarafından görülebilen herhangi bir değişkenin değerini bile değiştirebilirsiniz. Görmek istediklerinizi inceledikten sonra betiğin işleyişine devam edebilirsiniz.

Windows PowerShell hata ayıklama ortamında üç tür kesme noktası ayarlayabilirsiniz:

  1. Satır kesme noktası. Betiğin çalışması sırasında belirlenen satıra ulaşıldığında betik duraklar

  2. Değişken kesme noktası. Belirlenen değişkenin değeri değiştiğinde komut dosyası duraklatılır.

  3. Komut kesme noktası. Komut dosyasının çalışması sırasında belirlenen komut çalıştırılmak üzereyken komut dosyası duraklatılır. Kesme noktasını yalnızca istediğiniz işleme göre daha fazla filtrelemek için parametreler içerebilir. Komut aynı zamanda oluşturduğunuz bir fonksiyon da olabilir.

Bunlardan Windows PowerShell ISE hata ayıklama ortamında menü veya klavye kısayolları kullanılarak yalnızca satır kesme noktaları ayarlanabilir. Diğer iki tür kesme noktası ayarlanabilir ancak bunlar Set-PSBreakpoint cmdlet'i kullanılarak Konsol Bölmesinden ayarlanır. Bu bölümde, Windows PowerShell ISE'de mümkün olan menüleri kullanarak hata ayıklama görevlerini nasıl gerçekleştirebileceğiniz ve komut dosyası kullanarak Konsol Bölmesinden daha geniş bir komut yelpazesini nasıl gerçekleştirebileceğiniz açıklanmaktadır.

Bir kesme noktası ayarlamak için

Bir komut dosyasında ancak kaydedildikten sonra bir kesme noktası ayarlanabilir. Satır kesme noktası ayarlamak istediğiniz çizgiyi sağ tıklayın ve ardından Kesme Noktasını Değiştir'i tıklayın. Veya satır kesme noktası ayarlamak istediğiniz satırı tıklayın ve F9 tuşuna basın veya Hata Ayıkla menüsünde Kesme Noktasını Değiştir'i tıklayın.

Aşağıdaki komut dosyası, Set-PSBreakpoint cmdlet'ini kullanarak Konsol Bölmesinden değişken kesme noktasını nasıl ayarlayabileceğinizi gösteren bir örnektir.

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

Tüm kesme noktalarını listele

Geçerli Windows PowerShell oturumundaki tüm kesme noktalarını görüntüler.

Hata Ayıkla menüsünde Kesme Noktalarını Listele'yi tıklayın. Aşağıdaki komut dosyası, Get-PSBreakpoint cmdlet'ini kullanarak Konsol Bölmesindeki tüm kesme noktalarını nasıl listeleyebileceğinizin bir örneğidir.

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

Kesme noktasını kaldırma

Bir kesme noktasının kaldırılması onu siler.

Daha sonra tekrar kullanmak isteyebileceğinizi düşünüyorsanız, bunun yerine Kesme Noktasını Devre Dışı Bırakmayı düşünün. Kesme noktasını kaldırmak istediğiniz çizgiyi sağ tıklayın ve ardından Kesme Noktasını Değiştir'i tıklayın. Veya kesme noktasını kaldırmak istediğiniz satırı tıklayın ve Hata Ayıkla menüsünde Kesme Noktasını Değiştir'i tıklayın. Aşağıdaki komut dosyası, Remove-PSBreakpoint cmdlet'i kullanılarak Konsol Bölmesinden belirtilen kimliğe sahip bir kesme noktasının nasıl kaldırılacağına bir örnektir.

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

Tüm Kesme Noktalarını Kaldır

Geçerli oturumda tanımlanan tüm kesme noktalarını kaldırmak için Hata Ayıkla menüsünde Tüm Kesme Noktalarını Kaldır'ı tıklayın.

Aşağıdaki komut dosyası, Remove-PSBreakpoint cmdlet'ini kullanarak tüm kesme noktalarının Konsol Bölmesinden nasıl kaldırılacağını gösteren bir örnektir.

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

Kesme Noktasını Devre Dışı Bırak

Bir kesme noktasının devre dışı bırakılması onu kaldırmaz. Etkinleştirilene kadar kapatır. Belirli bir satır kesme noktasını devre dışı bırakmak için, kesme noktasını devre dışı bırakmak istediğiniz satırı sağ tıklayın ve ardından Kesme Noktasını Devre Dışı Bırak'ı tıklayın.

Veya kesme noktasını devre dışı bırakmak istediğiniz satırı tıklayın ve F9 tuşuna basın veya Hata Ayıkla menüsünde Kesme Noktasını Devre Dışı Bırak'ı tıklayın. Aşağıdaki komut dosyası, Disable-PSBreakpoint cmdlet'ini kullanarak belirtilen kimliğe sahip bir kesme noktasını Konsol Bölmesinden nasıl kaldırabileceğinizi gösteren bir örnektir.

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

Tüm Kesme Noktalarını Devre Dışı Bırak

Bir kesme noktasının devre dışı bırakılması onu kaldırmaz; etkinleştirilene kadar kapatır. Geçerli oturumdaki tüm kesme noktalarını devre dışı bırakmak için Hata Ayıkla menüsünde Tüm Kesme Noktalarını Devre Dışı Bırak'ı tıklayın. Aşağıdaki komut dosyası, Disable-PSBreakpoint cmdlet'ini kullanarak Konsol Bölmesindeki tüm kesme noktalarını nasıl devre dışı bırakabileceğinizi gösteren bir örnektir.

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

Bir Kesme Noktasını Etkinleştir

Belirli bir kesme noktasını etkinleştirmek için kesme noktasını etkinleştirmek istediğiniz çizgiyi sağ tıklayın ve ardından Kesme Noktasını Etkinleştir'i tıklayın. Veya kesme noktasını etkinleştirmek istediğiniz satırı tıklayın ve ardından F9 tuşuna basın veya Hata Ayıkla menüsünde Kesme Noktasını Etkinleştir'i tıklayın. Aşağıdaki komut dosyası, Enable-PSBreakpoint cmdlet'ini kullanarak Konsol Bölmesinden belirli kesme noktalarını nasıl etkinleştirebileceğinizin bir örneğidir.

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

Tüm Kesme Noktalarını Etkinleştir

Geçerli oturumda tanımlanan tüm kesme noktalarını etkinleştirmek için Hata Ayıkla menüsünde Tüm Kesme Noktalarını Etkinleştir'i tıklayın. Aşağıdaki komut dosyası, Enable-PSBreakpoint cmdlet'ini kullanarak Konsol Bölmesinden tüm kesme noktalarını nasıl etkinleştirebileceğinizin bir örneğidir.

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

Hata ayıklama oturumu nasıl yönetilir?

Hata ayıklamaya başlamadan önce bir veya daha fazla kesme noktası ayarlamanız gerekir. Hata ayıklamak istediğiniz komut dosyası kaydedilmediği sürece bir kesme noktası ayarlayamazsınız. Bir kesme noktasının nasıl ayarlanacağına ilişkin talimatlar için bkz. Kesme noktaları nasıl yönetilir veya Set-PSBreakpoint. Hata ayıklamaya başladıktan sonra, hata ayıklamayı durdurana kadar bir komut dosyasını düzenleyemezsiniz. Bir veya daha fazla kesme noktası ayarlanmış olan bir komut dosyası, çalıştırılmadan önce otomatik olarak kaydedilir.

Hata ayıklamayı başlatmak için

F5 tuşuna basın veya araç çubuğunda Komut Dosyasını Çalıştır simgesini tıklayın veya Hata Ayıkla menüsünde Çalıştır/Devam Et 'i tıklayın . Betik ilk kesme noktasıyla karşılaşıncaya kadar çalışır. Burada işlemi duraklatır ve duraklatıldığı satırı vurgular.

Hata ayıklamaya devam etmek için

F5 tuşuna basın veya araç çubuğunda Komut Dosyasını Çalıştır simgesini tıklayın veya Hata Ayıkla menüsünde Çalıştır/Devam Et'i tıklayın veya Konsol Bölmesinde C yazın ve ardından ENTER tuşuna basın. Bu, başka bir kesme noktasıyla karşılaşılmazsa betiğin bir sonraki kesme noktasına veya betiğin sonuna kadar çalışmaya devam etmesine neden olur.

Çağrı yığınını görüntülemek için

Çağrı yığını, komut dosyasındaki geçerli çalıştırma konumunu görüntüler. Komut dosyası farklı bir işlev tarafından çağrılan bir işlevde çalışıyorsa, bu, çıktıdaki ek satırlarla ekranda gösterilir. En alttaki satır, orijinal komut dosyasını ve içinde bir işlevin çağrıldığı satırı görüntüler. Bir sonraki satır, bu işlevi ve içinde başka bir işlevin çağrılmış olabileceği satırı gösterir. En üstteki satır, kesme noktasının ayarlandığı geçerli satırın geçerli içeriğini gösterir.

Duraklatılmış durumdayken geçerli çağrı yığınını görmek için CTRL+SHIFT+D tuşlarına basın veya Hata Ayıkla menüsünde , Çağrı Yığını Görüntüle'yi tıklayın veya Konsol Bölmesinde K yazın ve ardından ENTER tuşuna basın.

Hata ayıklamayı durdurmak için

SHIFT+F5 tuşlarına basın veya Hata Ayıkla menüsünde Hata Ayıklayıcıyı Durdur'u tıklayın veya Konsol Bölmesinde, Q yazın ve ardından ENTER tuşuna basın.

Hata ayıklama sırasında nasıl adım atılır, adım atılır ve nasıl çıkılır?

Adımlama, aynı anda bir ifadeyi çalıştırma işlemidir. Bir kod satırında durup değişkenlerin değerlerini ve sistemin durumunu inceleyebilirsiniz. Aşağıdaki tabloda, adım atma, içeri adım atma ve dışarı adım atma gibi yaygın hata ayıklama görevleri açıklanmaktadır.

Debugging Task Description How to accomplish it in PowerShell ISE
Step Into Executes the current statement and then stops at the next statement. 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. Press F11 or, on the Debug menu, click Step Into, or in the Console Pane, type S and press ENTER.
Step Over Executes the current statement and then stops at the next statement. 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. Press F10 or, on the Debug menu, click Step Over, or in the Console Pane, type V and press ENTER.
Step Out Steps out of the current function and up one level if the function is nested. If in the main body, the script is executed to the end, or to the next breakpoint. The skipped statements are executed, but not stepped through. Press SHIFT+F11, or on the Debug menu, click Step Out, or in the Console Pane, type O and press ENTER.
Continue Continues execution to the end, or to the next breakpoint. The skipped functions and invocations are executed, but not stepped through. Press F5 or, on the Debug menu, click Run/Continue, or in the Console Pane, type C and press ENTER.

Hata ayıklama sırasında değişkenlerin değerleri nasıl görüntülenir?

Kodda ilerledikçe komut dosyasındaki değişkenlerin geçerli değerlerini görüntüleyebilirsiniz.

Standart değişkenlerin değerlerini görüntülemek için

Aşağıdaki yöntemlerden birini kullanın:

  • Komut Dosyası Bölmesinde, değerini bir araç ipucu olarak görüntülemek için değişkenin üzerine gelin.

  • Konsol Bölmesinde değişkenin adını yazın ve ENTER tuşuna basın.

İMKB'deki tüm bölmeler her zaman aynı kapsamdadır. Bu nedenle, bir komut dosyasında hata ayıklarken Konsol Bölmesi'ne yazdığınız komutlar komut dosyası kapsamında çalışır. Bu, yalnızca komut dosyasında tanımlanan değişkenlerin ve çağrı işlevlerinin değerlerini bulmak için Konsol Bölmesini kullanmanıza olanak tanır.

Otomatik değişkenlerin değerlerini görüntülemek için

Bir komut dosyasında hata ayıklarken hemen hemen tüm değişkenlerin değerini görüntülemek için önceki yöntemi kullanabilirsiniz. Ancak bu yöntemler aşağıdaki otomatik değişkenler için çalışmaz.

  • $_

  • $Giriş

  • $MyInvokasyon

  • $PSBoundParameters

  • $Args

Bu değişkenlerden herhangi birinin değerini görüntülemeye çalışırsanız, koddaki değişkenin değerini değil, hata ayıklayıcının kullandığı dahili işlem hattındaki o değişkenin değerini alırsınız. Birkaç değişken için bu sorunu çözebilirsiniz ($_, $Input, $MyIntained, $PSBoundParameters, ve $Args) aşağıdaki yöntemi kullanarak:

  1. Komut dosyasında otomatik değişkenin değerini yeni bir değişkene atayın.

  2. Yeni değişkenin değerini, Komut Dosyası Bölmesinde yeni değişkenin üzerine gelerek veya Konsol Bölmesinde yeni değişkeni yazarak görüntüleyin.

Örneğin, komut dosyasında $MyInvation değişkeninin değerini görüntülemek için, değeri $scriptName gibi yeni bir değişkene atayın ve ardından fareyle üzerine gelin veya şunu yazın: değerini görüntülemek için $scriptName değişkenini kullanın.

# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1

Ayrıca Bakınız

Windows PowerShell ISE'yi Keşfetmek

İlgili makaleler