前回の続きです。Get-Helpコマンドレットはヘルプを表示しているわけではなく、オブジェクトを返します。コマンドレットのヘルプはMamlCommandHelpInfo、プロバイダのヘルプはProviderHelpInfo、言語のヘルプはstringにいくつかのPowerShellでのプロパティが追加されたものが返されます。
PS > $h = Get-Help Remove-Item
PS > $h.Name
Remove-Item
PS > $h.Synopsis
指定した項目を削除します。
などというように、ヘルプで表示される内容に個別にアクセスできます。
ですが、このヘルプオブジェクト、ProviderHelpInfoとMamlCommandHelpInfoの間で構造に一貫性があまり無いようです。ひつつ例を挙げます。
ProviderHelpInfoには頻出タスク別にコマンド例がいくつかあります。ProviderHelpInfoがTaskを複数持ち、TaskがExampleを複数持つという関係です。Exampleからは
PS > $ph = Get-Help FileSystem
PS > $ph.Tasks.Task[1].Title
ファイルとディレクトリ情報を取得する
PS > $ph.Tasks.Task[1].Examples.Example[0].Code
get-childitem
PS > $ph.Tasks.Task[1].Examples.Example[0].Introduction
現在のディレクトリにあるすべてのファイルとディレクトリを取得します。
既定では、Get-ChildItem の動作は再帰的ではありません。
PS > $ph.Tasks.Task[1].Examples.Example[0].Remarks
このコマンドを実行する際、現在のディレクトリにファイルとフォルダが存在している場合には、
System.IO.FileInfo オブジェクトと System.IO.DirectoryInfo オブジェクトという
2 種類のオブジェクトが返されることに注意してください。
のようにコマンド例とそれに対する説明、注釈などを取得できます。対して、MamlCommandHelpInfoのExampleからは
PS > $ch = Get-Help Remove-Item
PS > $ch.Examples.Example[0].Code
remove-item C:\Test\*.*
PS > $ch.Examples.Example[0].Introduction
C:\PS>
PS > $ch.Examples.Example[0].Remarks
このコマンドを実行すると、名前にドット (.) が含まれるファイルが C:\Test ディレクトリからすべて削除されます。
コマンドでドットを指定しているため、ディレクトリや拡張子のないファイルは削除されません。
のように、コマンド例とそれに対する説明を取得できますが、説明を取得できるプロパティがそれぞれRemarksとIntroductionというように異なっています。
他にも、この2つのオブジェクトにはちょっとした差異がいくつかあります。こういった差異が、独自にhtmlヘルプを作るときなど、オブジェクトを解析するときに足かせとなりそうです。
posted by bakemoji at 01:46|
Comment(0)
|
TrackBack(0)
|
PowerShell
|

|