Select-String
文字列とファイル内のテキストを検索します。
構文
Select-String
[-Pattern] <string[]>
[-Path] <string[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
[-Pattern] <string[]>
-InputObject <psobject>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
[-Pattern] <string[]>
-LiteralPath <string[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
説明
Select-String
コマンドレットは、入力文字列とファイル内のテキストとテキスト パターンを検索します。 UNIX の grep や Windows の grep に似たSelect-String
findstr.exe使用できます。
Select-String
はテキスト行に基づいています。 デフォルトでは、 Select-String
は各行で最初の一致を検索し、一致ごとに、一致を含む行のファイル名、行番号、およびすべてのテキストを表示します。 1 行に複数の一致を検索したり、一致の前後にテキストを表示したり、一致が見つかったかどうかを示すブール値 (True または False) を表示したりするように Select-String
に指示できます。
Select-String
正規表現の一致を使用しますが、指定したテキストの入力を検索する一致を実行することもできます。
Select-String
では、すべてのテキスト一致を表示するか、各入力ファイルの最初の一致後に停止できます。
Select-String
指定したパターンに一致しないすべてのテキストを表示するために使用できます。
また、Unicode テキストのファイルを検索する場合など Select-String
特定の文字エンコードを想定するように指定することもできます。
Select-String
では、バイトオーダー マーク (BOM) を使用してファイルのエンコード形式を検出します。 ファイルに BOM がない場合は、エンコードが UTF8 であると見なされます。
例
例 1: 大文字と小文字を区別する一致を検索する
この例では、パイプラインから Select-String
コマンドレットに送信されたテキストの大文字と小文字を区別して照合します。
'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch
テキスト文字列 Hello と HELLO は、パイプライン経由で Select-String
コマンドレットに送信されます。
Select-String
Pattern パラメータを使用して HELLO を指定します。
CaseSensitive パラメーターは、大文字と小文字が大文字のパターンのみに一致する必要があることを指定します。
SimpleMatch は省略可能なパラメーターであり、パターン内の文字列が正規表現として解釈されないことを指定します。
Select-String
PowerShell コンソールに HELLO を表示します。
例 2: テキスト ファイル内の一致を検索する
このコマンドは、現在のディレクトリでファイル名拡張子が .txt
すべてのファイルを検索します。 出力には、指定した文字列を含むファイル内の行が表示されます。
Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get'
Alias.txt:8:Alias cat -> Get-Content
Alias.txt:28:Alias dir -> Get-ChildItem
Alias.txt:43:Alias gal -> Get-Alias
Command.txt:966:Cmdlet Get-Acl
Command.txt:967:Cmdlet Get-Alias
この例では、 Get-Alias
と Get-Command
を Out-File
コマンドレットと共に使用して、現在のディレクトリに Alias.txt と Command.txtの 2 つのテキスト ファイルを作成します。
Select-String
Path パラメータとアスタリスク (*
) ワイルドカードを使用して、現在のディレクトリ内のファイル名拡張子が .txt
のすべてのファイルを検索します。
Pattern パラメーターは、Get- に一致するテキストを指定します。
Select-String
PowerShell コンソールに出力が表示されます。 ファイル名と行番号は、 Pattern パラメーターに一致する内容の各行の前にあります。
例 3: パターン一致を検索する
この例では、指定したパターンに一致するものを見つけるために、複数のファイルが検索されます。 パターンは正規表現の量指定子を使用します。 詳細については、about_Regular_Expressionsを参照してください。
Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'
C:\Program Files\PowerShell\6\en-US\default.help.txt:27: beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50: or go to: https://go.microsoft.com/fwlink/?LinkID=210614
Select-String
コマンドレットでは、Path と Pattern の 2 つのパラメーターを使用します。
Path パラメーターは、PowerShell ディレクトリを指定する変数 $PSHOME
を使用します。 パスの残りの部分には、サブディレクトリ (en-US ) が含まれ、ディレクトリ内の各 *.txt
ファイルを指定します。
Pattern パラメーターは、各ファイル内の疑問符 (?
) と一致するように指定します。 バックスラッシュ (\
) はエスケープ文字として使用され、疑問符 (?
) は正規表現の量指定子であるため、必要です。
Select-String
PowerShell コンソールに出力が表示されます。 ファイル名と行番号は、 Pattern パラメーターに一致する内容の各行の前にあります。
例 4: 関数で Select-String を使用する
この例では、PowerShell ヘルプ ファイル内のパターンを検索する関数を作成します。 この例では、関数は PowerShell セッションにのみ存在します。 PowerShell セッションが閉じられると、関数は削除されます。 詳細については、about_Functionsを参照してください。
PS> Function Search-Help
>> {
>> $PSHelp = "$PSHOME\en-US\*.txt"
>> Select-String -Path $PSHelp -Pattern 'About_'
>> }
PS>
PS> Search-Help
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2: about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31: see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33: about_CommonParameters.
この関数は、PowerShell コマンド ラインで作成されます。
Function
コマンドは Search-Help という名前を使用します。
Enter キーを押して、関数へのステートメントの追加を開始します。
>>
プロンプトから、各ステートメントを追加し、例に示すようにEnterキーを押します。 閉じ括弧を追加すると、PowerShell プロンプトに戻ります。
この関数には 2 つのコマンドが含まれています。
$PSHelp
変数には、PowerShell ヘルプ ファイルへのパスが格納されます。
$PSHOME
は、ディレクトリ内の各 *.txt
ファイルを指定するサブディレクトリ en-US を持つ PowerShell インストール ディレクトリです。
関数の Select-String
コマンドは、 Path パラメータと Pattern パラメータを使用します。
Path パラメーターは、$PSHelp
変数を使用してパスを取得します。
Pattern パラメーターは、検索条件として文字列 About_ を使用します。
関数を実行するには、「 Search-Help
」と入力します。 関数の Select-String
コマンドは、PowerShell コンソールに出力を表示します。
例 5: Windows イベント ログで文字列を検索する
この例では、Windows イベント ログで文字列を検索します。 変数 $_
は、パイプライン内の現在のオブジェクトを表します。 詳細については、about_Automatic_Variablesを参照してください。
$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'
Get-WinEvent
コマンドレットは、LogName パラメーターを使用してアプリケーション ログを指定します。
MaxEvents パラメーターは、ログから最新の 50 個のイベントを取得します。 ログの内容は、 $Events
という名前の変数に格納されます。
$Events
変数は、パイプラインから Select-String
コマンドレットに送信されます。
Select-String
InputObject パラメータを使用します。
$_
変数は現在のオブジェクトを表し、message
はイベントのプロパティです。
Pattern パラメータは、文字列 Failed を分類し、$_.message
で一致を検索します。
Select-String
PowerShell コンソールに出力が表示されます。
例 6: サブディレクトリ内の文字列を検索する
この例では、ディレクトリとそのすべてのサブディレクトリで特定のテキスト文字列を検索します。
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive
Get-ChildItem
Path パラメーターを使用して C:\Windows\System32*.txtを指定します。
Recurse パラメーターには、サブディレクトリが含まれます。 オブジェクトはパイプラインを通ってSelect-String
に送られます。
Select-String
Pattern パラメーターを使用し、文字列 Microsoft を指定します。
CaseSensitive パラメーターは、文字列の大文字と小文字を正確に一致させるために使用されます。
Select-String
PowerShell コンソールに出力が表示されます。
注
権限によっては、出力に 「アクセス拒否 」メッセージが表示される場合があります。
例 7: パターンに一致しない文字列を検索する
この例では、パターンに一致しないデータ行を除外する方法を示します。
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set' -NotMatch
Get-Command
コマンドレットは、オブジェクトをパイプラインから Out-File
に送信し、現在のディレクトリに Command.txtID ファイルを作成します。
Select-String
は Path パラメータを使用して Command.txt ファイルを指定します。
Pattern パラメーターは、検索パターンとして Get と Set を指定します。
NotMatch パラメーターは、結果から Get と Set を除外します。
Select-String
PowerShell コンソールに Get または Set を含まない出力を表示します。
例 8: 一致の前後の行を検索する
この例では、一致したパターンの前後の行を取得する方法を示します。
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3
Command.txt:1186:Cmdlet Get-CmsMessage 3.0.0.0 Microsoft.PowerShell.Security
Command.txt:1187:Cmdlet Get-Command 3.0.0.0 Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet Get-ComputerRestorePoint 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1190:Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1191:Cmdlet Get-ControlPanelItem 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1192:Cmdlet Get-Counter 3.0.0.0 Microsoft.PowerShell.Diagnostics
Get-Command
コマンドレットは、オブジェクトをパイプラインから Out-File
に送信し、現在のディレクトリに Command.txtID ファイルを作成します。
Select-String
は Path パラメータを使用して Command.txt ファイルを指定します。
Pattern パラメーターは、検索パターンとして Get-Computer を指定します。
Context パラメーターは、before と after の 2 つの値を使用し、出力のパターン一致を山かっこ (>
) でマークします。
Context パラメータは、最初のパターン一致の前の 2 行と最後のパターン一致の 3 行を出力します。
例 9: すべてのパターン一致を検索する
この例では、 AllMatches パラメーターがテキスト行内の各パターン一致を検索する方法を示します。 デフォルトでは、 Select-String
はテキスト行内で最初に出現するパターンのみを検索します。 この例では、 Get-Member
コマンドレットで見つかったオブジェクト プロパティを使用します。
PS> $A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
PS> $A
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5: Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9: Windows PowerShell Workflow adds the activity common
PS> $A.Matches
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 4
Length : 10
Value : PowerShell
PS> $A.Matches.Length
2073
PS> $B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
PS> $B.Matches.Length
2200
Get-ChildItem
コマンドレットは Path パラメーターを使用します。
Path パラメーターは、PowerShell ディレクトリを指定する変数 $PSHOME
を使用します。 パスの残りの部分には、サブディレクトリ (en-US ) が含まれ、ディレクトリ内の各 *.txt
ファイルを指定します。
Get-ChildItem
オブジェクトは $A
変数に格納されます。
$A
変数は、パイプラインから Select-String
コマンドレットに送信されます。
Select-String
Pattern パラメーターを使用して、各ファイルで文字列 PowerShell を検索します。
PowerShell コマンド ラインから、 $A
変数の内容が表示されます。
文字列 PowerShell の 2 つの出現を含む行があります。
$A.Matches
プロパティには、各行に PowerShell パターンが最初に出現する箇所が一覧表示されます。
$A.Matches.Length
プロパティは、各行でパターン PowerShell が最初に出現する回数をカウントします。
$B
変数は、同じ Get-ChildItem
コマンドレットと Select-String
コマンドレットを使用しますが、AllMatches パラメーターを追加します。
AllMatches は、各行で パターン PowerShell の各出現箇所を検索します。
$A
変数と$B
変数に格納されるオブジェクトは同じです。
$B.Matches.Length
プロパティは、各行でパターン PowerShell のすべての出現がカウントされるため、増加します。
パラメーター
-AllMatches
コマンドレットがテキストの各行で複数の一致を検索することを示します。 このパラメータを指定しない場合、 Select-String
はテキストの各行で最初に一致したもののみを検索します。
Select-String
テキスト行で複数の一致が見つかった場合でも、その行に対して 1 つの MatchInfo オブジェクトのみが出力されますが、オブジェクトの Matches プロパティにはすべての一致が含まれます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CaseSensitive
コマンドレットの一致で大文字と小文字が区別されることを示します。 デフォルトでは、一致では大文字と小文字は区別されません。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Context
パターンに一致する行の前後の指定した行数をキャプチャします。
このパラメータの値として 1 つの数値を入力すると、その数値によって、一致の前後にキャプチャされる行数が決まります。 値として 2 つの数値を入力すると、最初の数値で一致前の行数が決まり、2 番目の数字で一致後の行数が決まります。 たとえば、-Context 2,3
のようにします。
デフォルトの表示では、一致する行は、表示の最初の列に右山括弧 (>
) (ASCII 62) で示されます。 マークされていない線がコンテキストです。
Context パラメーターは、Select-String
によって生成されるオブジェクトの数を変更しません。
Select-String
一致ごとに 1 つの MatchInfo オブジェクトを生成します。 コンテキストは、オブジェクトの Context プロパティに文字列の配列として格納されます。
Select-String
コマンドの出力がパイプラインを下って別の Select-String
コマンドに送信されると、受信コマンドは一致した行のテキストのみを検索します。 一致した行は、コンテキスト行のテキストではなく、MatchInfo オブジェクトの Line プロパティの値です。 その結果、 Context パラメーターは受信側の Select-String
コマンドでは無効になります。
コンテキストに一致が含まれている場合、各一致の MatchInfo オブジェクトにはすべてのコンテキスト行が含まれますが、重なり合う行は表示に一度だけ表示されます。
型: | Int32[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Encoding
ターゲット ファイルのエンコードの種類を指定します。 既定値は Defaultです。
このパラメーターに使用できる値は次のとおりです。
- ASCII ASCII (7 ビット) 文字セットを使用します。
- BigEndianUnicode では、ビッグ エンディアンバイト順で UTF-16 を使用します。
- 既定の システムのアクティブなコード ページ (通常は ANSI) に対応するエンコードを使用します。
- OEM システムの現在の OEM コード ページに対応するエンコードを使用します。
- Unicode では、リトル エンディアンバイト順で UTF-16 が使用されます。
- UTF7
UTF-7 を使用します。 - UTF8 は UTF-8 を使用します。
- UTF32 では、リトル エンディアンバイト順で UTF-32 が使用されます。
型: | String |
指定可能な値: | ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32 |
配置: | Named |
規定値: | Default |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Exclude
指定した項目を除外します。 このパラメーターの値は、Path パラメーターを修飾します。 パス要素またはパターン (*.txt
など) を入力します。 ワイルドカードを使用できます。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-Include
指定した項目が含まれます。 このパラメーターの値は、Path パラメーターを修飾します。 パス要素またはパターン (*.txt
など) を入力します。 ワイルドカードを使用できます。
型: | String[] |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | True |
-InputObject
検索するテキストを指定します。 テキストを含む変数を入力するか、テキストを取得するコマンドまたは式を入力します。
InputObject パラメーターを使用することは、パイプラインから API に文字列を送信することと同じではありませんSelect-String
。
Select-String
コマンドレットに複数の文字列をパイプ処理すると、各文字列で指定されたテキストが検索され、検索テキストを含む各文字列が返されます。
InputObject パラメータを使用して文字列のコレクションを送信すると、Select-String
はコレクションを 1 つの結合文字列として扱います。
Select-String
任意の文字列で検索テキストが見つかった場合は、文字列を単位として返します。
型: | PSObject |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-List
一致するテキストの最初のインスタンスのみが各入力ファイルから返されます。 これは、正規表現に一致する内容を持つリスト ファイルを取得する最も効率的な方法です。
デフォルトでは、 Select-String
は一致が見つかったたびに MatchInfo オブジェクトを返します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-LiteralPath
検索するファイルへのパスを指定します。 LiteralPath パラメーターの値は、入力されたとおりに正確に使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。 詳細については、about_Quoting_Rulesを参照してください。
型: | String[] |
Aliases: | PSPath |
配置: | Named |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-NotMatch
NotMatch パラメーターは、指定したパターンに一致しないテキストを検索します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Path
検索するファイルへのパスを指定します。 ワイルドカードを使用できます。 デフォルトの場所はローカルディレクトリです。
ディレクトリ内のファイル ( log1.txt
、 *.doc
、 *.*
など) を指定します。 ディレクトリのみを指定すると、コマンドは失敗します。
型: | String[] |
配置: | 1 |
規定値: | Local directory |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | True |
-Pattern
各行で検索するテキストを指定します。 文字列または正規表現を入力します。 文字列を入力する場合は、 SimpleMatch パラメーターを使用します。
正規表現の詳細については、「 about_Regular_Expressions」を参照してください。
型: | String[] |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Quiet
コマンドレットが MatchInfo オブジェクトではなくブール値 (True または False) を返すことを示します。 パターンが見つかった場合、値は True です。それ以外の場合、値は False です。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-SimpleMatch
コマンドレットが正規表現の一致ではなく単純な一致を使用することを示します。 単純な一致では、 Select-String
は Pattern パラメーター内のテキストの入力を検索します。
Pattern パラメーターの値は、正規表現ステートメントとして解釈されません。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
ToString メソッドを持つ任意のオブジェクトを Select-String
にパイプ処理できます。
出力
Microsoft.PowerShell.Commands.MatchInfo or System.Boolean
デフォルトでは、出力は MatchInfo オブジェクトのセットで、一致が見つかるたびに 1 つになります。 Quiet パラメータを使用する場合、出力はパターンが見つかったかどうかを示すブール値になります。
メモ
Select-String
は、UNIX の grep や Windows の findstr.exe に似ています。
Select-String
コマンドレットの sls エイリアスは、PowerShell 3.0 で導入されました。
注
「Approved Verbs for PowerShell Commands」によると、Select-*
コマンドレットの公式エイリアス プレフィックスは [sl
] ではなく [sc
] です。 したがって、Select-String
の適切なエイリアスは、sls
ではなく scs
にする必要があります。 これは、このルールの例外です。
Select-String
を使用するには、検索するテキストを Pattern パラメーターの値として入力します。 検索するテキストを指定するには、次の条件を使用します。
- 引用符で囲まれた文字列にテキストを入力し、
Select-String
にパイプします。 - テキスト文字列を変数に格納し、その変数を InputObject パラメーターの値として指定します。
- テキストがファイルに格納されている場合は、 Path パラメーターを使用してファイルへのパスを指定します。
デフォルトでは、 Select-String
は Pattern パラメータの値を正規表現として解釈します。 (詳細については、「 about_Regular_Expressions」を参照してください。
SimpleMatch パラメーターを使用して、正規表現の一致をオーバーライドできます。
SimpleMatch パラメーターは、入力内の Pattern パラメーターの値のインスタンスを検索します。
Select-String
のデフォルト出力は MatchInfo オブジェクトで、これには一致に関する詳細情報が含まれています。 オブジェクト内の情報は、ファイル内のテキストを検索するときに便利です。 これは、MatchInfo オブジェクトには Filename や Line などのプロパティがあるためです。 入力がファイルからのものでない場合、これらのパラメーターの値は InputStream です。
MatchInfo オブジェクトの情報が必要ない場合は、Quiet パラメータを使用します。 Quiet パラメータは、MatchInfo オブジェクトではなく、一致が見つかったかどうかを示すブール値 (True または False) を返します。
語句を一致させるとき、 Select-String
はシステムに設定されている現在のカルチャを使用します。 現在のカルチャを見つけるには、Get-Culture コマンドレットを使用します。
MatchInfo オブジェクトのプロパティを検索するには、次のコマンドを入力します。
Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *