PowerShell ISE で変数の値を調べる方法

PowerShell DEBUG

PowerShell DEBUG

PowerShell ISEでデバッグ

2023年12月、PowerShell ISEを使ってPowerShellスクリプトをデバッグする方法を調べました。
ブレークポイントを設定してステップ実行する方法は、すぐに分かったのですが、変数の値を調べる方法がなかなか分かりませんでした。

PowerShellは、ちょっと癖がありますけどすごく強力です。

先日、作成したTITLEタグを抽出するスクリプトは、Write-Debug文を挿入したデバッグ手法を使いましたが、デバッグ機能を使用するとデバッグが簡単に行えます。

すごいPowerShell WEBスクレイピングが簡単!

PowerShell ISEのデバッグ機能

統合開発環境「PowerShell ISE」(Windows PowerShell Integrated Scripting Environment )は、Windows PowerShellのスクリプト作成から実行、デバッグを行うためのツールです。

メニューから「デバッグ(D)」を選択するとデバッグに使用するコマンドを表示します。

PowerShell DEBUG メニュー

PowerShell DEBUG メニュー

PowerShell ISE デバッグコマンド
キー 説明
[F9] ブレークポイント設定/解除

カーソル行の位置にブレークポイントを設定します。

Ctrl+Shift+L ブレークポイントの一覧表示
[F5] 実行/続行

プログラムの実行を開始します。
ブレークポイントで停止している場合は続行します。

[F10] ステップ オーバー

ステップ実行します。関数呼び出しの場合は、関数から戻るまで一度に実行します。

[F11] ステップ イン

ステップ実行します。関数呼び出しの場合は、関数の中に入りステップ実行します。

Shift+
[F11]
ステップ アウト

関数から抜けるまで一度に実行します。

PowerShellスクリプトのデバッグ

PowerShellスクリプト

「すごいPowerShell WEBスクレイピングが簡単!」と同じPowerShellスクリプトを使用します。

すごいPowerShell WEBスクレイピングが簡単!


###===  WEB タイトル取得 ===
function get_title($url) {
    $title_text = "???"
    #== Get HTML
    try {
        $response = Invoke-WebRequest -Uri $url  -TimeoutSec 5
    } catch {
       Write-Host "??? Error ",$url
       return($title_text)
    }
    $oHtml = $response.ParsedHtml
    # TITLE タグ
    $elements = $oHtml.getElementsByTagName("title")
    foreach($elm in $elements) {
        $title_text = $elm.outerText
        $title_html = $elm.outerHTML
        Write-Debug $title_html
    }
    return($title_text)
}
###  Main
#$debugPreference = "Continue"
#
$url_ary = @("indexttl.html" , "indexaut.html" , "indexkey.html")
$url_base = "http://my-web-site.iobb.net/~yuki/bit/"

Write-Host $url_base
foreach ($url in $url_ary) {
    $url_adr = $url_base + $url
    $title = get_title $url_adr
    Write-Host "  " $url " =====> " $title
}

スクリプト デバッグ操作

PowerShell DEBUG操作

PowerShell DEBUG操作

スクリプトの19行目にカーソルを設定して[F9]を押してブレークポイントを設定します。
「Ctrl+Shift+L」を入力すると、実行ウィンドゥでget-psbreakpointコマンドを実行してブレークポイントの一覧を表示します。

[F5]を押してスクリプトの実行を開始して、ブレークポイントで停止します。
[F11]を押すとステップ実行します。

変数の値を調べたい

統合開発環境「PowerShell ISE」で簡単にデバッグできるのですか、変数の値を調べる方法がわかりませんでした。
デバッグ(D)メニューにそれらしき項目もありません。

しばらく触っていると変数の値を調べる方法がようやくわかりました。
変数にマウスカーソルを合わせてちょっと待つとポップアップで変数の値を表示します。

例えば、18行目の「$elm.outerText」にマウスカーソルを合わせると「索引(題名) | bit目次」と表示します。また、「$elm」にマウスカーソルを合わせると$elmオブジェクトのメンバーを表示します。

PowerShell 変数の値を調べる

PowerShell 変数の値を調べる

$elmオブジェクトのメンバーは、outerTextやouterHTMLなど多くの項目を含んでいます。
どんなオブジェクトメンバーがあるか調べることができますが、このポップアップからコピペはできません。ちょっと不便です。

調べてみると実行ウィンドゥの[DBG]:プロンプトに変数を入力すると変数の値を表示することが分かりました。


[DBG]: PS E:\>> $elm.outerText
索引(題名) | bit目次

[DBG]: PS E:\>> $elm


className                    : 
id                           : 
tagName                      : TITLE
  
  ・・・省略・・・
  
innerHTML                    : 索引(題名) | bit目次
innerText                    : 索引(題名) | bit目次
outerHTML                    : <TITLE>索引(題名) | bit目次</TITLE>
outerText                    : 索引(題名) | bit目次
  
  ・・・省略・・・
[DBG]: PS E:\>> 

PowerShell ISEは便利

PowerShell ISEを使用すると、ブレークポイントで止めて変数の値を確認できるのでとても便利です。
また、新しく使用するオブジェクトがあるときは、そのメンバーも調べることができます。