PowerShell Cmdlet - Select-String
 記事記号:[mg1977] 初版:2011/Sep/30

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    Select-String
    
概要
    文字列とファイルのテキストを検索します。
    
構文
    Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseS
    ensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-
    Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonPara
    meters>]
    
    Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-
    CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]
    >] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<Commo
    nParameters>]
    
説明
    Select-String コマンドレットは、入力文字列およびファイル内でテキストとテキス
    ト パターンを検索します。このコマンドレットは、UNIX の Grep および Windows 
    の Findstr と同じように使用できます。
    
    Select-String は、テキストの行を基準にします。既定では、Select-String は各行
    で最初の一致を検索します。また一致ごとに、一致が含まれる行のファイル名、行番
    号、およびすべてのテキストを表示します。
    
    ただし、1 行あたり複数の一致を検出するか、一致の前後にあるテキストを表示する
    か、または一致が見つかったかどうかを示すブール値 (True または False) のみを
    表示するように、このコマンドレットに指示することができます。
    
    Select-String は正規表現による一致を使用しますが、入力文字列内で指定のテキス
    トを検索する単純一致を実行することもできます。
    
    Select-String では、テキストのすべての一致を表示したり、各入力ファイルで最初
    の一致が検出されたところで停止したりできます。このコマンドレットは、指定した
    パターンに一致しないすべてのテキストも表示できます。
    
    Unicode テキストのファイルを検索する場合など、Select-String が特定の文字エン
    コードを想定するように指定することもできます。
    
パラメーター
    -AllMatches [<SwitchParameter>]
        テキストの各行で複数の一致を検索します。このパラメーターがない場合、Sele
        ct-String は、テキストの各行で最初の一致のみを検索します。
        
        Select-String がテキストの 1 つの行で複数の一致を検出した場合、その行に
        対して 1 つの MatchInfo オブジェクトを生成するだけですが、オブジェクトの 
        Matches プロパティにはすべての一致が含まれます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -CaseSensitive [<SwitchParameter>]
        一致を調べる際に大文字と小文字が区別されます。既定では、大文字と小文字は
        区別されません。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Context <Int32[]>
        一致を含む行の前後にある行について、指定した行数分をキャプチャします。こ
        れにより、一致をコンテキストと共に表示できます。
        
        1 つの数字をこのパラメーターの値として入力した場合、その数字は、一致の前
        後にある行についてキャプチャする行数を表します。2 つの数字をこのパラメー
        ターの値として入力した場合、1 番目の数字は一致の前にある行数を、2 番目の
        数字は一致の後にある行数を表します。
        
        既定では、一致を含む行は、画面の最初の列に終了角かっこ (ASCII 62) で表示
        されます。マークされていない行はコンテキストです。
        
        このパラメーターを指定しても、Select-String で生成されるオブジェクトの数
        は変更されません。Select-String では、一致ごとに 1 つの MatchInfo (Micro
        soft.PowerShell.Commands.MatchInfo) オブジェクトが生成されます。コンテキ
        ストは、オブジェクトの Context プロパティに文字列の配列として保存されま
        す。
        
        パイプを使用して Select-String コマンドの出力を他の Select-String コマン
        ドに渡す場合、受け取り側のコマンドでは、コンテキストの行にあるテキストで
        はなく、一致を含む行にあるテキスト (MatchInfo オブジェクトの Line プロパ
        ティの値) のみが検索されます。その結果、受け取り側の Select-String コマ
        ンドでは、Context パラメーターが無効になります。
        
        コンテキストに一致が含まれている場合、各一致の MatchInfo オブジェクトに
        はコンテキストのすべての行が含まれます。ただし、画面には重複する行が一度
        だけ表示されます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Encoding <string>
        Select-String がファイルを検索する際に使用する文字エンコードを指定します。
        既定値は UTF8 です。
        
        指定可能な値は、"UTF7"、"UTF8"、"UTF32"、"ASCII"、"Unicode"、"BigEndianU
        nicode"、"Default"、および "OEM" です。Default を指定した場合、システム
        の現在の ANSI コード ページのエンコードが使用されます。OEM を指定した場
        合、オペレーティング システムの現在の OEM コード ページ識別子が使用され
        ます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Exclude <string[]>
        指定された項目を除外します。このパラメーターの値は、Path パラメーターを
        修飾します。"*.txt" などのパス要素またはパターンを入力します。ワイルドカ
        ードを使用できます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Include <string[]>
        指定された項目のみを含めます。このパラメーターの値は、Path パラメーター
        を修飾します。"*.txt" などのパス要素またはパターンを入力します。ワイル
        ドカードを使用できます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -InputObject <psobject>
        検索するテキストを指定します。テキストが格納されている変数を入力するか、
        テキストを取得するコマンドまたは式を記述します。
        
        必須                         true
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByValue)
        ワイルドカード文字を許可する false
        
    -List [<SwitchParameter>]
        各入力ファイルの最初の一致のみを返します。既定では、Select-String は、検
        出した一致のそれぞれに対して MatchInfo オブジェクトを返します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -NotMatch [<SwitchParameter>]
        指定したパターンに一致しないテキストを検索します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Path <string[]>
        検索するファイルのパスを指定します。ワイルドカードを使用できます。既定の
        場所はローカル ディレクトリです。
        
        "log1.txt"、"*.doc"、"*.*" など、ディレクトリ内のファイルを指定します。
        ディレクトリのみを指定すると、コマンドは実行されません。
        
        必須                         true
        位置                         2
        既定値                       
        パイプライン入力を許可する   true (ByPropertyName)
        ワイルドカード文字を許可する false
        
    -Pattern <string[]>
        検索するテキストを指定します。文字列または正規表現を入力します。文字列を
        入力する場合、SimpleMatch パラメーターを使用します。
        
        正規表現の詳細については、「about_Regular_Expressions」を参照してくださ
        い。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Quiet [<SwitchParameter>]
        MatchInfo オブジェクトの代わりに、ブール値 (True または False) を返しま
        す。このブール値は、指定したパターンを検出した場合は "True"、それ以外の
        場合は "False" になります。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -SimpleMatch [<SwitchParameter>]
        正規表現による一致ではなく、単純一致を使用します。単純一致では、Select-S
        tring は入力文字列内で Pattern パラメーターのテキストを検索します。この
        コマンドレットは、Pattern パラメーターの値を正規表現ステートメントとして
        解釈しません。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    System.Management.Automation.PSObject
        パイプを使用して、ToString メソッドを含むあらゆるオブジェクトを Select-S
        tring に渡すことができます。
    
出力
    Microsoft.PowerShell.Commands.MatchInfo または System.Boolean
        既定では、出力は一連の MatchInfo オブジェクトです (検出した一致ごとに 1 
        つずつ)。Quiet パラメーターを指定した場合、出力はパターンが見つかったど
        うかを示すブール値になります。
    
メモ
        Select-String は、UNIX の Grep コマンドおよび Windows の FindStr コマン
        ドに似ています。
        
        Select-String を使用するには、検索するテキストを Pattern パラメーターの
        値として入力します。
        
        
        検索するテキストを指定するには、以下の手順に従います。
        
        -- 引用符で囲まれた文字列にテキストを入力し、パイプを使用してテキストを 
           Select-String に渡します。
        -- 変数にテキスト文字列を格納し、この変数を InputObject パラメーターの値
           として指定します。
        -- テキストをファイルに格納する場合、Path パラメーターを使用してファイル
           のパスを指定します。
        
        既定では、Select-String は Pattern パラメーターの値を正規表現として解釈
        します (詳細については、「about_Regular_Expressions」を参照してください)。
        ただし、SimpleMatch パラメーターを使用すると、正規表現による一致をオーバ
        ーライドできます。SimpleMatch パラメーターでは、入力文字列内で Pattern 
        パラメーター値のインスタンスが検出されます。
        
        既定では、Select-String の出力は、一致に関する詳細情報を含む MatchInfo 
        オブジェクトです。MatchInfo オブジェクトには Filename や Line などのプロ
        パティがあるので、このオブジェクトの情報はファイル内のテキストを検索する
        場合に便利です。入力がファイル以外の場合、これらのパラメーターの値は Inp
        utStream です。
        
        MatchInfo オブジェクトの情報が必要ない場合は、Quiet パラメーターを使用し
        ます。これにより、MatchInfo オブジェクトの代わりに、一致を検出したかどう
        かを示すブール値 (True または False) が返されます。
        
        語句を照合する際に、Select-String はシステムに設定されている現在のカルチ
        ャを使用します。現在のカルチャを検索するには、Get-Culture コマンドレット
        を使用します。
        
        MatchInfo オブジェクトのプロパティを見つけるには、次のように入力します。
        
        select-string -path test.txt -pattern "test" | get-member | format-list 
        -property *
        
    -------------------------- 例 1 --------------------------
    
    C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive
    
    説明
    -----------
    このコマンドは、パイプを使用して Select-String コマンドに渡されたテキストを、 
    大文字と小文字を区別して照合します。
    
    その結果、"Hello" は一致しないので、Select-String は "HELLO" のみを検出しま
    す。
    
    引用符で囲まれた文字列はそれぞれ 1 行として扱われるので、CaseSensitive パラ
    メーターがない場合、Select-String はこの両方の文字列を一致として認識します。
    
    -------------------------- 例 2 --------------------------
    
    C:\PS>select-string -path *.xml -pattern "the the"
    
    説明
    -----------
    このコマンドは、現在のディレクトリ内のファイル名拡張子が .xml のファイルをす
    べて検索し、これらのファイル中の "the the" という文字列を含む行を表示します。
    
    -------------------------- 例 3 --------------------------
    
    C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@"
    
    説明
    -----------
    このコマンドは、Windows PowerShell の概念説明のヘルプ ファイル (about_*.txt) 
    内で、アットマーク (@) の使用に関する情報を検索します。
    
    このコマンドでは、パスを示すために $pshome 自動変数の値を使用します。この変
    数には、Windows PowerShell のインストール ディレクトリのパスが格納されます。
    この例では、Windows PowerShell 用の英語 (米国) のヘルプ ファイルが含まれてい
    る en-US サブディレクトリを検索します。
    
    -------------------------- 例 4 --------------------------
    
    C:\PS>function search-help
    {
        $pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml"
        select-string -path $pshelp -pattern $args[0]
    }
    
    説明
    -----------
    この単純な関数は、Select-String コマンドレットを使用して、Windows PowerShell 
    ヘルプ ファイル内の特定の文字列を検索します。この例では、en-US サブディレク
    トリ内で英語 (米国) のファイルを検索します。
    
    関数を使用して psdrive などの文字列を検索するには、「search-help psdrive」と
    入力します。
    
    任意の Windows PowerShell コンソールでこの関数を使用するには、お使いのシステ
    ムで Windows PowerShell ヘルプ ファイルをポイントするパスを変更し、関数を Wi
    ndows PowerShell プロファイルに貼り付けます。
    
    -------------------------- 例 5 --------------------------
    
    C:\PS>$events = get-eventlog -logname application -newest 100
    
    C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed"
    
    説明
    -----------
    この例では、イベント ビューアーの Application ログの最新のイベント 100 件か
    ら文字列 "failed" を検索します。
    
    最初のコマンドは、Get-EventLog コマンドレットを使用して、Application イベン
    ト ログから最新のイベント 100 件を取得します。次に、そのイベントを $events 
    変数に格納します。
    
    2 番目のコマンドは、パイプライン演算子 (|) を使用して、$events 変数に格納さ
    れているオブジェクトを Select-String に送信します。このコマンドは InputObjec
    t パラメーターを使用して、$events 変数からの入力を表します。InputObject パラ
    メーターの値は、パイプラインを移動する各オブジェクトの Message プロパティで
    す。現在のオブジェクトは $_ symbol で表されます。
    
    各イベントがパイプラインに到達すると、Select-String は Message プロパティの
    値で "failed" 文字列を検索し、一致が含まれているすべての行を表示します。
    
    -------------------------- 例 6 --------------------------
    
    C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse |
    select-string -pattern "Microsoft" -casesensitive
    
    説明
    -----------
    このコマンドは、C:\Windows\System32 のサブディレクトリにあるファイル名拡張子
    が .txt のすべてのファイルについて "Microsoft" という文字列を検索します。Cas
    eSensitive パラメーターは、Select-String で一致が検出されるには、"Microsoft" 
    の "M" が大文字で、残りの文字が小文字である必要があることを示します。
    
    -------------------------- 例 7 --------------------------
    
    C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch
    
    説明
    -----------
    このコマンドは、Process.txt ファイルで、単語 "idle" または "svchost" を含ま
    ないテキスト行を検索します。
    
    -------------------------- 例 8 --------------------------
    
    C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 
    3
    
    C:\PS> $f.count
    
    C:\PS> ($f)[0].context | format-list
    
    説明
    -----------
    最初のコマンドは、Audit.Log ファイル内で "logon failed" という語句を検索しま
    す。Context パラメーターを使用して、一致の前の 2 行分と一致の後の 3 行分をキ
    ャプチャします。
    
    2 番目のコマンドは、オブジェクト配列の Count プロパティを使用して、検出され
    た一致の数を表示します (この場合は 2)。
    
    3 番目のコマンドは、最初の MatchInfo オブジェクトの Context プロパティに格納
    された行を表示します。このコマンドは、配列表記を使用して最初の一致 (0 ベース
    配列の一致 0 番) を示し、Format-List コマンドレットを使用して Context プロパ
    ティの値を一覧表示します。
    
    出力は、検出された一致ごとに 1 つずつ、2 つの MatchInfo オブジェクトで構成さ
    れます。コンテキストの行は、MatchInfo オブジェクトの Context プロパティに格
    納されます。
    
    -------------------------- 例 9 --------------------------
    
    C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -patt
    ern transcript
    
    C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pat
    tern transcript -allmatches
    
    C:\PS> $a
    C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39
    :       Start-Transcript and Stop-Transcript.
    
    C:\PS> $b
    C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39
    :       Start-Transcript and Stop-Transcript.
    
    C:\PS>> $a.matches
    Groups   : {Transcript}
    Success  : True
    Captures : {Transcript}
    Index    : 13
    Length   : 10
    Value    : Transcript
    
    C:\PS> $b.matches
    Groups   : {Transcript}
    Success  : True
    Captures : {Transcript}
    Index    : 13
    Length   : 10
    Value    : Transcript
    
    Groups   : {Transcript}
    Success  : True
    Captures : {Transcript}
    Index    : 33
    Length   : 10
    Value    : Transcript
    
    説明
    -----------
    この例では、Select-String の AllMatches パラメーターの結果について示します。A
    llMatches パラメーターは、各行の最初の一致のみを検索するのではなく、行にある
    すべてのパターンの一致を検索します。
    
    この例の最初のコマンドは、Windows PowerShell の概念説明のヘルプ ファイル ("ab
    out" ヘルプ) 内で、単語 "transcript" のインスタンスを検索します。2 番目のコマ
    ンドは、AllMatches パラメーターを使用する点を除いて、最初のコマンドと同じです。
    
    最初のコマンドの出力は $a 変数に保存されます。2 番目のコマンドの出力は $b 変
    数に保存されます。
    
    変数の値を表示する場合、既定では出力例のように表示されます。
    
    ただし、5 番目と 6 番目のコマンドは、各オブジェクトの Matches プロパティの値
    を表示します。最初のコマンドの Matches プロパティには、一致が 1 つだけ含まれ
    ています (つまり、1 つの System.Text.RegularExpressions.Match オブジェクト)。
    一方、2 番目のコマンドの Matches プロパティには、行内の両方の一致に対応するオ
    ブジェクトが含まれています。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113388
    about_Comparison_Operators 
    about_Regular_Expressions 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Select-String
ご利用数: 1919680
感想・要望・問い合わせは こちら