PowerShell ObjectViewer(1)
「Powershell Analyzer」にインスパイア
PowerShellの開発環境 - PowerShell Memoで紹介した「Powershell Analyzer」では、
PowerShellの実行結果をPropertyGridに表示することで、実行結果を可視化してます。
PropertyGridってオブジェクトの全体像が簡単に把握できて良いですね。
特に、PowerShellに初めて触れるユーザにとって、取っ付き易いでしょう。
さて、PropertyGridを利用したサンプルを作ろうと考えたのですが、
「Powershell Analyzer」と同様、コマンド実行結果を可視化するのが最も有用・・・、
という安易な結論に達しました。(^^;
初心者向けPowerShell ObjectViewer
この「PowerShell ObjectViewer」は、テキストボックスにコマンドを入力して「Enter」を押すと、
実行結果をPropertyGridに表示するツールです。
「winlogonプロセス」の表示
上の図は、
get-process | ?{$_.name -eq "winlogon"}
というコマンドを実行した結果です。
「get-process」で実行中の全てのプロセスをパイプで繋げて、「winlogon」という名前のプロセスだけにフィルタリングしています。
そして、PropertyGridに「winlogon.exe」のプロセスオブジェクト(System.Diagnostics.Process)を表示しています。
ソースコード
ObjectViewer.ps1
# コマンドを実行する function runCommand { $resultObj = Invoke-Expression $txtObject.Text return $resultObj } # プロパティグリッドにオブジェクトを設定する function setObject { PARAM($setObj) if($setObj -ne $null) { $pgObject.selectedobject=$setObj.PSObject.BaseObject $title = $setObj.toString() $frmMain.Text = $title Write-Host $title } } # テキストボックス上で押されたキーをチェックする function keyCheck { PARAM($keyEventArgs) switch($keyEventArgs.KeyCode) { ([System.windows.forms.Keys]::Enter) {setObject(runCommand)} default{} } } # 初期処理 [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") # フォーム設定 $frmMain = new-object system.windows.forms.form $frmMain.Size = new-object System.Drawing.Size(600, 600) # テキストボックス $txtObject = new-object System.Windows.Forms.TextBox $txtObject.AutoSize = $false $txtObject.Size = new-object System.Drawing.Size(600, 25) $txtObject.Dock = [System.Windows.Forms.DockStyle]::Top $txtObject.Font = ` new-object System.Drawing.Font($txtObject.Font.SystemFontName, 14) $txtObject.Add_KeyDown({keyCheck($_)}) # プロパティグリッド $pgObject = new-object system.windows.forms.propertygrid $pgObject.Dock = [System.Windows.Forms.DockStyle]::Fill # コントロール追加 $frmMain.Controls.Add($txtObject) $frmMain.Controls.add($pgObject) # フォーム表示 $frmMain.showdialog()