2017-05-04 17 views
1

ログファイルの検索に問題があります。私は、ログファイル内の特定のテキストを検索する基本的なスクリプトを持っています。問題は、コマンドラインでユーザーが調整できる変数を使用しようとしていますが、その変数を認識させることができないということです。スクリプトは、結果を画面に出力する必要があります。この場合変数を使用してファイル内の文字列を検索

PS C:\> .\LogSearch.ps1 logfile04.txt 192.168.1.7 21

logfile04.txtファイルは、ポートが21であり、IPアドレスは、この時点で192.168.1.7

ある:コマンドラインの

param (
[string]$file , 
[string]$Ip , 
[string]$port 
) 
Get-Content -Path C:\$file | Where-Object {$_ -like $Ip -and $_ -like $port} 

例は、スクリプトを実行しますスクリプトを実行すると、何も返されませんが、ファイル内にその行があります。

4|Oct 19 2015|18:28:39|106023|75.76.77.80|50077|192.168.1.7|21|Deny tcp src

+1

'です。 '*'で囲まれたIPとポートを入力すると動作しますか? –

+1

@MacroPower '-like'は' -match'となる正規表現を使用しません。 ['-like'はワイルドカードを使用する](https://msdn.microsoft.com/powershell/reference/5.1/Microsoft.PowerShell.Core/about/about_Wildcards)、' * 'は実際には1つです。 – BenH

+0

コマンドラインで '*'を使うとうまくいきます!私は今、 '192.168.1.7'の全ての行を' 21'のポートではなく取得しています。しかし、私は、この質問には関係のない別の問題だと思います。 –

答えて

1

ワイルドカードなしで使用-likeオペレータは-eqのと等価です。あなたの行は、正確には192.168.1.721の両方に同時に等しくないので、決して戻ってこないでしょう。したがって、-likeを使用する場合は、一致文字列をワイルドカードで囲む必要があります。

Get-Content -Path C:\$file | Where-Object {$_ -like "*$Ip*" -and $_ -like "*$port*"} 

また、-match演算子は正規表現を使用します。だから、ワイルドカードは必要ありません。ここで

Get-Content -Path C:\$file | Where-Object {$_ -match $Ip -and $_ -match $port} 

は、正規表現を使用しています-like` good guide on the different uses of these comparison operators

関連する問題