)Select-Stringコマンドレットの実体Select-Stringコマンドレットの実体はMicrosoft.PowerShell.Commands.Utility.dllにあるSelectStringCommandクラスになります。ILSpy等でこのクラスの中身を見て具体的に何を検索しているのか調べることができるので、以降はその結果について書いていきます。ファイルを検索する場合Select-Stringコマンドレットは-Pathおよび-LiteralPathパラメータを指定してファイルを検索する場合と-InputObjectを指定してオブジェクトを検索する場合にパターン分けされます。はじめにファイルを検索する場合について調べてみます。この場合はわかりやすく、-Pathおよび-LiteralPathで指定されたファイル内部のテキストが検索対象になります。-Encodingパラメーターで指定されたエンコーディング(デフォルトはUTF8)でファイルが開かれ中のテキストが1行ずつ検索されていきます。ちなみに-Pathと-LiteralPathの違いはファイル名にワイルドカードを許可するかしないかになります。オブジェクトを検索する場合-InputObjectを指定した場合はオブジェクトが検索対象になります。この場合は指定されるオブジェクトによって内部動作が変わってきます。System.IO.FileInfoの場合-InputObjectにSystem.IO.FileInfoが来た場合は前項同様にファイルの中身を検索します。World.な場合を想定します。Hello.txtな場合、戻り値はHello.txtに対するFileInfoクラスになります。World.となりHello.txtの中身を検索し1行目の"Hello"がヒットしていることがわかります。-Streamを通してやると良いです。System.IO.DirectoryInfoはディレクトリ名が検索対象になります。Microsoft.PowerShell.Commands.MatchInfoの場合Microsoft.PowerShell.Commands.MatchInfoはSelect-Stringの戻り値の型です。検索されてヒットされた結果を格納するオブジェクトになります。このクラスを特別扱いしているのはSelect-Stringされた結果をさらにパイプラインでつないだ場合を想定しているのだと思われます。-InputObjectにMatchInfoが来た場合はMatchInfo.Lineプロパティ(String型)の内容が検索対象になります。World."であることがわかります。"txt"でパイプラインを繋げた場合、コンソールには"Hello.txt"が表示されいるもののMatchInfo.Lineには"txt"は含まれていないため何もヒットしません。"world"であればヒットします。"txt"で検索がヒットします。その他の型の場合-InputObjectにその他の型のオブジェクトが来た場合はその型をSystem.Management.Automation.LanguagePrimitives.ConvertTo()メソッドでString型に変換した結果が検索対象になります。名前から察するにこのメソッドはPowerShellの型変換機構そのものだと思われます。-InputObjectにその他の型のオブジェクトが来た場合はPowerShellの型変換機構によってString型に変換された結果が検索対象になるといっても良いと思います。このSystem.Management.Automation.LanguagePrimitives.ConvertTo()メソッドの詳細を読み解くことはできませんでした...ただ、いろいろなクラスで挙動を見た限り、おおむねToString()メソッドの結果と近いのかなぁと思いました。これまでの例でGet-ChildItem(ls)した結果をFormat-List(fl)した場合、以下の様な結果になります。flした結果、コンソールにはフォーマットされた内容が表示されますが、戻り値はMicrosoft.PowerShell.Commands.Internal.Format.ほげほげなクラスの配列になります。$_.GetType().FullName-----------------------Microsoft.PowerShell.Commands.Internal.Format.FormatStartDataMicrosoft.PowerShell.Commands.Internal.Format.GroupStartDataMicrosoft.PowerShell.Commands.Internal.Format.FormatEntryDataMicrosoft.PowerShell.Commands.Internal.Format.GroupEndDataMicrosoft.PowerShell.Commands.Internal.Format.FormatEndDataこのため単純にSelect-Stringを実行しても何もヒットしません。".*"Microsoft.PowerShell.Commands.Internal.Format.FormatStartDataMicrosoft.PowerShell.Commands.Internal.Format.GroupStartDataMicrosoft.PowerShell.Commands.Internal.Format.FormatEntryDataMicrosoft.PowerShell.Commands.Internal.Format.GroupEndDataMicrosoft.PowerShell.Commands.Internal.Format.FormatEndDataとなり、文字列型に変換(≒ToString())された後の文字列が検索対象となっていることがわかります。-Streamを通してやるといい感じになってくれます。以下の補足記事を書きましたのでこちらも併せてご覧ください。広告スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。